updated docs

[[Split portion of a mixed commit.]]
This commit is contained in:
ansstuff 2012-08-08 15:00:14 +00:00
parent fa4d8fbd38
commit fd1360db10
86 changed files with 3588 additions and 3691 deletions

File diff suppressed because it is too large Load Diff

View File

@ -3,7 +3,7 @@
<head>
<title>AVI Capturing</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -53,14 +53,14 @@
<div id="topic_content">
<p><span class="rvts17">Video &amp; Audio Capturing</span></p>
<p><span class="rvts16"><br></span></p>
<p><span class="rvts16"><br/></span></p>
<p><span class="rvts16">Introduction</span></p>
<p><br></p>
<p><br/></p>
<p>FCEU allows for outputting Video/Audio into .avi files or capturing audio only into .wav files. &nbsp;This can be used to capture one's playing or for dumping movie files (.fm2) to .avi files.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts16">Capturing a Movie File (.fm2) to Video/Audio (AVI)</span></p>
<p><br></p>
<p><br/></p>
<p>-Pause the emulator by navigating to NES &gt; Emulation Speed &gt; pause or pressing the pause hotkey (the pause key by default). &nbsp;</p>
<p>-For a faster capture increase emulation speed (you can capture at any emulation speed and FCEUX will still output a 60 (or 50) fps video file).</p>
<p>-Select "Replay Movie" from the File &gt; Movie Menu and select the movie file</p>
@ -69,13 +69,13 @@
<p>-Select a file location and the video codec you wish to use.</p>
<p>-Unpause the emulator.</p>
<p>-When capturing is complete, pause the emulator and select "Stop AVI" in the File Menu.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts16">Capture Audio only</span></p>
<p><br></p>
<p><br/></p>
<p>To capture audio only, navigate to File &gt; AVI/Wav &gt; Record WAV. &nbsp;Pick a filename and destination for FCEUX to begin capturing the audio to a .wav file (raw .pcm). &nbsp;To stop WAV recording, select File &gt; AVI/Wav &gt; Stop WAV.</p>
<p><br></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com">Free PDF documentation generator</a></p>
<p><br/></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/help-authoring-tool">Create HTML Help, DOC, PDF and print manuals from 1 single source</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>Auto Fire Settings</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -53,22 +53,22 @@
<div id="topic_content">
<p><span class="rvts35">Auto Fire Settings</span></p>
<p><br></p>
<p><br/></p>
<p><span class="rvts12">Autofire Pattern</span></p>
<p><br></p>
<p><br/></p>
<p>The default configuration for an auto fire key is the alteration of on/off/on/off every frame. &nbsp;For most games this works nicely, but there are situations where this doesn't work properly. &nbsp;For example, Double Dragon 2 and Teenage Mutant Ninja Turtles run at 30fps (screen updates every other frame). &nbsp;To use autofire in these types of games, you would want to set the autofire pattern to 2 on / 2 off. &nbsp; In a situation where a players weapon on fires every 4th frame, you can set the autofire pattern to 1 on / 3 off.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts12">Autofire Offset</span></p>
<p><br></p>
<p><br/></p>
<p>The default is for certain frames to have the on setting and others to have the off setting. &nbsp;For instance, "on" might be lined up with a movie file's even numbers. &nbsp;But a situation may need the autofire pattern to have "on" on the odd numbers instead. &nbsp;In this case the autofire offset should be set to 1. &nbsp;This will delay the normal "on" fire by 1 frame. &nbsp;If an autofire pattern is set to 2 on / 2 off, an autofire offset of 2 might be necessary.</p>
<p><span class="rvts12"><br></span></p>
<p><span class="rvts12"><br/></span></p>
<p><span class="rvts12">Alternate A and B</span></p>
<p><br></p>
<p><br/></p>
<p>Alternate A and B is for a specific case where both the A and B autofire buttons are pressed simultaneously. &nbsp;With alternate A and B, the fire pattern will be A,B,A,B rather than A+B, off, A+B, off.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p>Note: All autofire patterns read the Lag Counter (see <span class="rvts18">display</span>) and skip over any frames where input is not polled. &nbsp;This means that in a laggy area, the autofire pattern will not be affected.</p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour">Easily create PDF Help documents</a></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour/create-ebooks-for-amazon-kindle">Produce Kindle eBooks easily</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>Cheat Search</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -53,101 +53,101 @@
<div id="topic_content">
<p><span class="rvts17">FCE Ultra Cheat Guide</span></p>
<p><span class="rvts12"><br></span></p>
<p><span class="rvts12"><br/></span></p>
<p><span class="rvts12">Introduction</span></p>
<p><br></p>
<p><br/></p>
<p>FCE Ultra allows cheating by the periodic "patching" of arbitrary addresses in the 6502's memory space with arbitrary values, as well as read substitution. "Read substitution" is the method that would be used on a real NES/Famicom, such as done by the Game Genie and Pro Action Replay. It is required to support GG and PAR codes, but since it is relatively slow when done in emulation, it is not the preferred method when a RAM patch will suffice. Also, in FCE Ultra, read substitution will not work properly with zero-page addressing modes(instructions that operate on RAM at $0000 through $00FF).</p>
<p><br></p>
<p><br/></p>
<p>The RAM patches are all applied a short time before the emulated vertical blanking period. This detail shouldn't concern most people, though. However, this does mean that cheating with games that use bank-switched RAM may be problematic. Fortunately, such games are not very common (in relation to the total number of NES and Famicom games).</p>
<p><br></p>
<p><br/></p>
<p>The cheat search comes with its own set of tools for finding addresses in memory to use for making cheats (or for monitoring the addresses in the <a class="rvts18" href="MemoryWatch.html">memory watch window</a>)</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts12">Cheat Files</span></p>
<p><br></p>
<p><br/></p>
<p>By default cheat files (.cht) are stored in the "cheats" subdirectory under the base FCEUX. The files are in a simple plain-text format. Each line represents a one-byte memory patch. The format is as follows(text in brackets [] represents optional parameters):</p>
<p><br></p>
<p><br/></p>
<p> &nbsp; &nbsp;[S][C][:]Address(hex):Value(hex):[Compare value:]Description </p>
<p><br></p>
<p><br/></p>
<p>Example:</p>
<p><br></p>
<p><br/></p>
<p> &nbsp; &nbsp;040e:05:Infinite super power.</p>
<p><br></p>
<p><br/></p>
<p>A colon(:) near the beginning of the line is used to disable the cheat. "S" denotes a cheat that is a read-substitute-style cheat(such as with Game Genie cheats), and a "C" denotes that the cheat has a compare value.</p>
<p><br></p>
<p><br/></p>
<p>Note: &nbsp;When a game is loaded, FCEUX will load any accompanying saved .cht file automatically.</p>
<p><br></p>
<p><br/></p>
<p>The default .cht file folder can be changed with the <a class="rvts18" href="Directories.html">Directory Override menu</a>.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts12">The Cheat Search Menu</span></p>
<p><br></p>
<p><br/></p>
<p>The cheat search interface consists of several components: a list of addresses and associated data for a search, several command buttons, and the search parameters.</p>
<p><br></p>
<p><br/></p>
<p>All addresses listed in the cheat search windows are in unsigned 16-bit hexadecimal format and all values in these windows are in an unsigned 8-bit decimal format(the range for values is 0 through 255).</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts28">Active Cheats</span></p>
<p><br></p>
<p><br/></p>
<p>The Active cheats window on the left contains the list of cheats for the currently loaded game. Existing cheats can be selected, edited, and updated using the "Update" button.</p>
<p><br></p>
<p><br/></p>
<p>Each entry in the list is in the format of: &nbsp;* Address = Value</p>
<p><br></p>
<p><br/></p>
<p>The address is the location in the 6502's address space. &nbsp;The * denotes that the current cheat is active (double clicking will toggle on/off). &nbsp;Value is the value (in hex) that the addresses has been locked into.</p>
<p><br></p>
<p><br/></p>
<p>You can add, delete, and update cheats in the active cheats window with the boxes below.</p>
<p>To find an address use the cheat search portion of the window.</p>
<p><br></p>
<p><br/></p>
<p>There is also a right-click menu with the options Toggle Cheat, Poke Cheat Value, and Goto In Hex Editor.</p>
<p><br></p>
<p><br/></p>
<p>Toggle Cheat is like Double Clicking. It enables or disables the cheat code.</p>
<p>Poke Cheat Value is like turning the cheat on, but in this case there's no off switch. If the code is on when you use this, then when the code is turned off, it will revert to the value last used. Good for one time life refills, if you want that sort of thing.</p>
<p>Goto in Hex Editor opens the Hex Editor window, and puts the cursor on the address shown. It's somewhat similar to how Bookmarks work in the Hex Editor.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts28">Cheat Search</span></p>
<p><br></p>
<p><br/></p>
<p>The cheat search is used to find a specific value in the games RAM by process of elimination.</p>
<p><br></p>
<p><br/></p>
<p>The possibilities window is in the format of &nbsp;Address:Original Value:Current Value</p>
<p>The address is the location in the 6502's address space, the original value is the value that was stored at this address when the search was reset, and the current value is the value that is currently stored at that address. Selecting an item in this list will automatically cause the "Address" field in the cheat information box on the right side of the window to be updated with the selected address.</p>
<p><br></p>
<p><br/></p>
<p>The "Reset" button resets the search process; all valid addresses are displayed in the possibilities window and the data values at those addresses noted in both the left and right columns. &nbsp;The number of possibilities is displayed at the top. &nbsp;Resetting will set it to 2048 or 10240 depending on if the game uses "On cartridge ram" ($6000-$7FFF). &nbsp;(See <a class="rvts18" href="NESRAMMappingFindingValues.html">NES RAM</a>)</p>
<p><br></p>
<p><br/></p>
<p>The left column is the "previous value" and the right column is the "current value"</p>
<p><br></p>
<p><br/></p>
<p>The "Known Value", "Equal", "Not Equal", Greater than" and Less than" buttons perform a search based on the search parameter and removes any non-matching addresses from the address list. &nbsp; It then sets the "previous value" column to the contents of the "current value"</p>
<p><br></p>
<p><br/></p>
<p>"Known Value" will search for all addresses that match the value in the box to the right (the value is in hex).</p>
<p><br></p>
<p><br/></p>
<p>"Equal" will search for all addresses that have the same value now as the last search (or since reset was pressed, if there has not yet been a search).</p>
<p><br></p>
<p><br/></p>
<p>"Not equal" will search for all addresses that have changed sine the last search (or since reset was pressed, if there has not yet been a search).</p>
<p>If the checkbox next to it is checked it will looks for values that have changed by the value in the number box to the right. &nbsp;For instance, if it is checked and the number is 5, it will search for all values that are +- 5 from the previous value.</p>
<p><br></p>
<p><br/></p>
<p>"Greater than" functions like "Not equal" except it only searches for values that have increased since the last search.</p>
<p><br></p>
<p><br/></p>
<p>"Less than" functions like "Not equal" except it only searches for values that have decreased since the last search.</p>
<p><span class="rvts10"><br></span></p>
<p><span class="rvts10"><br/></span></p>
<p><span class="rvts10">Using the Results</span></p>
<p><br></p>
<p><br/></p>
<p>Any value in the possibilities list can be sent to memory watch by double clicking it. &nbsp;</p>
<p>Highlighting it and hitting the "Add" button under the Active cheats window will automatically activate it as a cheat with the value set to its current value.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts28">Example</span></p>
<p><br></p>
<p><br/></p>
<p>Here is an example of cheat search in action.</p>
<p><br></p>
<p><br/></p>
<p>Let's say I am playing Mega man 3 and I want to find Mega man's energy level in the game's ram. &nbsp;I will start by opening the ROM and selecting a level. &nbsp;At this point, I know Mega man's energy address is active. &nbsp;So I will pause the game and open the cheat search and hit the reset button. &nbsp;The game uses SRAM so the possibilities window will say 10240 "possibilities". &nbsp;</p>
<p>Next I will frame advance (or briefly unpause) the game. &nbsp;At this point I know Mega man's energy level is still the same as it was. &nbsp;So I click the "equal" button. &nbsp; Next I want to take damage. &nbsp;I know for sure now that the energy level has decreased so after the "ouch" animation, I click the "Less than button". &nbsp;This will cut the possibilities down significantly. &nbsp;Next I will advance some more and click the "Equal" button since I know the value is still the previous value. &nbsp;I will repeat this cycle until I am down to 1 or just a few values. &nbsp;From there I can double click the values to send them to memory watch to monitor them more closely to weed them out. &nbsp;(Note: &nbsp;Mega man's energy is located in $00A2).</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts28">Context Menu</span></p>
<p><br></p>
<p><br/></p>
<p>Right-clicking in the active cheats list brings up the context menu.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts38">Toggle Cheat</span> - does the same thing as double clicking</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts38">Poke cheat value</span> - has a different affect that normal freezing, this makes a one time write of that value as opposed to freezing it temporarily to that value and having it restored later. &nbsp;It has the same affect as typing in values in the <a class="rvts18" href="HexEditor.html">Hex Editor</a>.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts38">Goto In Hex Editor</span> - Opens the <a class="rvts18" href="HexEditor.html">Hex editor</a> dialog to the position of the selected RAM value.</p>
<p><br></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour/iphone-website-generation">Easily create iPhone documentation</a></p>
<p><br/></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com">Easy CHM and documentation editor</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>Code/Data Logger</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -53,41 +53,36 @@
<div id="topic_content">
<p><span class="rvts17">Code/Data Logger</span></p>
<p><br></p>
<p><br/></p>
<p>(Taken from the FCEUXD readme.txt)</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts16">Introduction</span></p>
<p><br></p>
<p><br/></p>
<p>The Code/Data Logger makes it *much* easier to reverse-engineer NES ROMs. &nbsp;The idea behind it is that a normal NES disassembler cannot distinguish between code (which is executed) and data (which is read). The Code/Data logger keeps track of what is executed and what is read while the game is played, and stores this information in a .cdl file, which is essentially a mask that tells which bytes in the ROM are code and which are data. The file can then be used in conjunction with a suitable disassembler (which I plan to make) to disassemble only the actual game code, resulting in a much cleaner source code, with code and data properly separated.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts16">Using the Code/Data Logger</span></p>
<p><br></p>
<p><br/></p>
<p>The Code/Data Logger keeps track of every byte in the ROM and records whether it's code (is executed) or data (is read). In the future, I hope to combine this with a suitable disassembler that will disassemble only bytes marked as "code", in order to generate near-perfect source code (provided you play through the game several times, very thoroughly, to ensure everything gets logged). In order to get that feature to work, I need to get the Address Label Logger working, in order to create all the labels.</p>
<p><br></p>
<p><br/></p>
<p>But right now, it is very useful for finding specific code and data by using it with the Trace Logger (see above for instructions on doing this). &nbsp;Furthermore, while it is running, the Hex Editor will color-code bytes depending on whether they were logged as code or data. And it can also be used to create a stripped NES ROM (see below).</p>
<p><br></p>
<p><br/></p>
<p>Some notes: when you open another .cdl file, it does not clear the current log; instead, it combines it with the information in the file. &nbsp;This can be useful if you're trying to obtain a complete log, as multiple people can play through the game and keep code/data logs, and then the results can be combined. &nbsp;But if you would like to actually clear the code/data log, press the "Reset Log" button.</p>
<p><br></p>
<p><br/></p>
<p>A "stripped" NES ROM is one in which everything that was not logged by the code/data logger is removed. This may be just a novelty feature, however it can be useful because you can view the ROM in a Hex Editor, and you'll see only the parts that were used while playing. Furthermore, you could use it to create a demo ROM by only playing through the parts you would like others to see.</p>
<p><br></p>
<p><br/></p>
<p>To do so, follow these steps:</p>
<p><br></p>
<p><br/></p>
<p>1. Open the Code/Data Logger, and press Start to begin logging.</p>
<p><br></p>
<p>2. Perform a soft and a hard reset while logging, in order to capture the ROM's startup sequence. If you don't do so, you can distribute a save-state file so they will start from within the game.</p>
<p><br></p>
<p>3. If the game has Save-RAM (e.g. Zelda), you will need to capture the game's Save-RAM initialization routines; you can try to do so by deleting the game's *.sav file and then perform a soft and hard reset (F10, F11) again while logging.</p>
<p><br></p>
<p>4. Play through whatever levels you want present in the demo. Be sure to perform every move, get every item, etc., so that the code and data necessary for those things are logged. If, for example, you fail to perform some special move, then if someone plays the stripped ROM and attempts to perform that move, the game may very well crash or glitch up.</p>
<p><br></p>
<p>5. Save the stripped NES ROM.</p>
<p><br></p>
<p>6. Rejoice, for it is done.</p>
<p><br></p>
<p><br/></p>
<p>CDL log files are just a mask of the PRG-ROM; that is, they are the same size as the PRG-ROM, and each byte represents the corresponding byte of the PRG-ROM. &nbsp;The format of each byte is like so (in binary):</p>
<p><br></p>
<p><br/></p>
<p> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;xPdcAADC</p>
<p><br></p>
<p><br/></p>
<p> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;C &nbsp;= Whether it was accessed as code.</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;D &nbsp;= Whether it was accessed as data.</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;AA = Into which ROM bank it was mapped when last accessed:</p>
@ -99,13 +94,13 @@
<p> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;(e.g. as the destination of an LDA ($nn),Y instruction)</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;P &nbsp;= If logged as PCM audio data.</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;x &nbsp;= unused.</p>
<p><br></p>
<p><br/></p>
<p>CDL files make possible a number of things never before done. &nbsp;First, a PCM data ripper could be created that scans for data that has the 'P' bit set, in order to find/rip/play every PCM sample in a ROM. &nbsp;Also, it is possible for someone to make a more intelligent ROM corruptor that only corrupts data (by checking the 'D' bit). &nbsp;In any case, the Code/Data Logger opens many new possibilities for discovering useful things in games. &nbsp;Another interesting possibility (which is now partially supported) would be to use the Code/Data Logger on an NSF file to create a stripped NSF. Such an NSF would contain nothing but the relevant subroutines and data required by each tune played; this would be helpful to NSF rippers by removing irrelevant information. Thus, an NSF ripper could create a stripped NSF by listening to each track while the Code/Data Logger operates on it, and then saving the stripped NSF. &nbsp;It should be noted that this capability, though tested and working on private builds, is detrimental to the process of fixing broken NSF files. For this reason, data logging is allowed for NSF files, but stripping NSF files of unused data is disabled.</p>
<p><br></p>
<p><br></p>
<p><br></p>
<p><br></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/help-authoring-tool">Free help authoring tool</a></p>
<p><br/></p>
<p><br/></p>
<p><br/></p>
<p><br/></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com">Free HTML Help documentation generator</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>Command Line Options</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -53,175 +53,175 @@
<div id="topic_content">
<p><span class="rvts17">Command Line Options</span></p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p>FCEUX offers numerous command line options.</p>
<p>All commands are case sensitive.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts16">ROM name</span></p>
<p>Plays specified ROM (ROM name must always be put last in command line arguments)</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts30">fceux path\rom.nes</span> (or <span class="rvts30">rom.zip</span>)</p>
<p><br></p>
<p><br/></p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;<span class="rvts29">fceux smb.nes</span></p>
<p><span class="rvts29"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts29">fceux c:\fceux\roms\smb.zip</span></p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts16">Play Movie File</span></p>
<p>Plays a specified movie (.fm2) file. &nbsp;A valid ROM must be specified or movie will not be played.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts30">fcuex -playmovie path\movie.fm2 romname</span></p>
<p><br></p>
<p><br/></p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;<span class="rvts29">fceux -playmovie smb.fm2 smb.nes</span></p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts16">Read-only Status</span></p>
<p>Specifies whether a movie will be in "read-only" or "read &amp; write" mode. &nbsp;(Note: a specified movie is not required to be used in conjunction with this command). 1 specifies read only status, 0 specifies read &amp; write.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts30">fceux -readonly flag</span></p>
<p><br></p>
<p><br/></p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;<span class="rvts29">fceux -readonly 1</span></p>
<p><span class="rvts29"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts29">fceux -readonly 0 -playmovie smb.fm2 smb.nes</span></p>
<p><span class="rvts29"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts29">fceux -readonly 1 -playmovie c:\fceux\movies\smb.fm2 c:\fceux\roms\smb.nes</span></p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts16">Stop Movie at frame x</span></p>
<p>Specifies that the movie will automatically stop at the specified frame. &nbsp;(A movie must be specified with -playmovie for this command to work)</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts30">fceux -playmovie path\movie.fm2 -stopframe framenumber romname</span></p>
<p><br></p>
<p><br/></p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;<span class="rvts29">fceux -playmovie smb.fm2 -stopframe 10000 smb.nes</span></p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts16">Load State</span></p>
<p>Specifies FCEUX to automatically load a specified savestate file. &nbsp;(Must have a specified ROM for this to work).</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts30">fceux -loadstate path\savestatefile romname</span></p>
<p><br></p>
<p><br/></p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;<span class="rvts29">fceux -loadstate smb0.fc0 smb.nes</span></p>
<p><span class="rvts29"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts29">fceux -playmovie smb.fm2 -readonly 0 -loadstate smb0.fc0 smb.nes</span></p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts16">Pause Movie After Playback</span></p>
<p>Sets the "<a class="rvts18" href="ToggleSwitchesHideMenuetc.html">Pause Movie After Playback</a>" switch on/off. &nbsp;1 sets it to enabled, 0 sets it to disabled.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts30">fceux -stopmovie flag</span></p>
<p><br></p>
<p><br/></p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;<span class="rvts29">fceux -stopmovie 1</span></p>
<p><span class="rvts29"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts29">fceux -playmovie smb.fm2 -readonly 0 - stopmovie 1 smb0.nes</span></p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts16">Frame Display Toggle</span></p>
<p>Toggles whether or not the frame count will be displayed. &nbsp;1 sets it to on, 0 sets it to off.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts30">fceux -framedisplay flag</span></p>
<p><br></p>
<p><br/></p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;<span class="rvts29">fceux -framedisplay 1</span></p>
<p><span class="rvts29"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts29">fceux -playmovie smb2.fm2 -framedisplay 1 smb0.nes</span></p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts16">Input Display Toggle</span></p>
<p>Toggles whether the movie input will be displayed. &nbsp;1 sets it to on, 0 sets it to off.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts30">fceux -inputdisplay flag</span></p>
<p><br></p>
<p><br/></p>
<p><span class="rvts29"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts29">fceux -inputdisplay 1</span></p>
<p><span class="rvts29"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts29">fceux -playmovie smb2.fm2 -inputdisplay 1 smb0.nes</span></p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts16">Allow L+R/U+D</span></p>
<p>Sets whether or not the game will allow L+R/U+D input (see <a class="rvts18" href="Input.html">Input config</a>). &nbsp;1 enables L+R, 0 disables it.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts30">fceux -allowUDLR flag</span></p>
<p><br></p>
<p><br/></p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;<span class="rvts29">fceux -allowUDLR 1</span></p>
<p><span class="rvts29"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts29">fceux -allowUDLR 0 smb0.nes</span></p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts16">Enable Background Input</span></p>
<p>Sets the "<a class="rvts18" href="ToggleSwitchesHideMenuetc.html">Enable Background Input</a>" switch on/off. &nbsp;1 sets it to enabled, 0 sets it to disabled.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts30">fceux -bginput flag</span></p>
<p><br></p>
<p><br/></p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;<span class="rvts29">fceux -bginput 0</span></p>
<p><span class="rvts29"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts29">fceux -playmovie smb.fm2 -readonly 0 -bginput 1 smb0.nes</span></p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts16">Use Game Genie</span></p>
<p>Sets the Game Genie Flag (see <a class="rvts18" href="ToggleSwitchesHideMenuetc.html">Toggle Switches</a>). &nbsp;1 sets it to enabled, 0 sets it to disabled.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts30">fceux -gg flag</span></p>
<p><span class="rvts29"><br></span></p>
<p><span class="rvts29"><br/></span></p>
<p><span class="rvts29"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts29">fceux -gg 1</span></p>
<p><span class="rvts29"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts29">fceux -gg 1 smb0.nes</span></p>
<p><br></p>
<p><br/></p>
<p><span class="rvts16">PAL Emulation</span></p>
<p>Sets the PAL Emulation Toggle (see <a class="rvts18" href="ToggleSwitchesHideMenuetc.html">Toggle Switches</a>). &nbsp;1 sets it to enabled, 0 sets it to disabled.</p>
<p>(note: FCEUX will assign PAL emulation automatically if a PAL ROM is loaded) </p>
<p><br></p>
<p><br/></p>
<p><span class="rvts30">fceux -pal flag</span></p>
<p><span class="rvts29"><br></span></p>
<p><span class="rvts29"><br/></span></p>
<p><span class="rvts29"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts29">fceux -pal 1</span></p>
<p><span class="rvts29"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts29">fceux -pal 1 smb0.nes</span></p>
<p><br></p>
<p><br/></p>
<p><span class="rvts16">Movie Status Icon Toggle</span></p>
<p>Sets the Status Icon Toggle (see <a class="rvts18" href="ToggleSwitchesHideMenuetc.html">Toggle Switches</a>). &nbsp;1 turns off the status icon, 0 turns it on.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts30">fceux -noicon flag</span></p>
<p><span class="rvts29"><br></span></p>
<p><span class="rvts29"><br/></span></p>
<p><span class="rvts29"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts29">fceux -noicon 1</span></p>
<p><span class="rvts29"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts29">fceux -noicon 0 smb0.nes</span></p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts16">Clip Left and Right Sides</span></p>
<p>Sets the Clip Left and Right Sides Toggle (see <a class="rvts18" href="Video.html">Video Config</a>). &nbsp;1 turns on clipping, 0 turns it off.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts30">fceux -clipsides flag</span></p>
<p><span class="rvts29"><br></span></p>
<p><span class="rvts29"><br/></span></p>
<p><span class="rvts29"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts29">fceux -clipsides 0 smb0.nes</span></p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts16">Allow More than 8 Sprites per Scanline</span></p>
<p>Sets the 8 Sprites per scanline flag (see <a class="rvts18" href="Video.html">Video Config</a>). &nbsp;1 turns on extra sprites, 0 turns it off.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts30">fceux -no8lim flag</span></p>
<p><span class="rvts29"><br></span></p>
<p><span class="rvts29"><br/></span></p>
<p><span class="rvts29"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts29">fceux -no8lim 0 smb0.nes</span></p>
<p><span class="rvts29"><br></span></p>
<p><span class="rvts29"><br></span></p>
<p><span class="rvts29"><br/></span></p>
<p><span class="rvts29"><br/></span></p>
<p><span class="rvts16">Disable Speed Throttling</span></p>
<p>Sets the Disable Speed Throttling When Sound is Disabled flag (see <a class="rvts18" href="Timing.html">Timing Config</a>). &nbsp;1 disables throttling, 0 leaves it on.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts30">fceux -nothrottle flag</span></p>
<p><span class="rvts29"><br></span></p>
<p><span class="rvts29"><br/></span></p>
<p><span class="rvts29"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts29">fceux -nothrottle 0 smb0.nes</span></p>
<p><span class="rvts31"><br></span></p>
<p><span class="rvts31"><br></span></p>
<p><span class="rvts31"><br/></span></p>
<p><span class="rvts31"><br/></span></p>
<p><span class="rvts16">Turbo Toggle</span></p>
<p>Sets the Turbo Toggle. &nbsp;1 Sets Turbo on, 0 leaves it off.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts30">fceux &nbsp;-turbo flag</span></p>
<p><br></p>
<p><br/></p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;<span class="rvts29">fceux -turbo 1 smb0.nes</span></p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts16">Load Config File</span></p>
<p>Loads a specified config file rather than the default fceux.cfg</p>
<p><br></p>
<p><br/></p>
<p>Warning: &nbsp;the config file must be in the base directory. &nbsp;A pathname can NOT be specified in the filename</p>
<p><br></p>
<p><br/></p>
<p>fceux -cfg filename</p>
<p><br></p>
<p><br/></p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;<span class="rvts29">fceux -cfg fceux-smbconfig.cfg smb.nes</span></p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts16">Load Lua Script</span></p>
<p>Loads a Lua script on startup.</p>
<p><br></p>
<p><br/></p>
<p>fceux -lua filename</p>
<p><br></p>
<p><br/></p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;<span class="rvts29">fceux -lua memwatch.lua</span></p>
<p><br></p>
<p><br/></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour">Easily create Help documents</a></p>
</div>

View File

@ -3,7 +3,7 @@
<head>
<title>Using Lua</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -53,157 +53,157 @@
<div id="topic_content">
<p>(written by qFox)</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts28">Introduction</span></p>
<p><br></p>
<p><br/></p>
<p>Lua is a scripting language. It is used in games like Farcry and World of Warcraft (and many other games and applications!). Even though you can find all kinds of tutorials online, let me help you with the basics.</p>
<p><br></p>
<p><br/></p>
<p>I will assume you are at least somewhat familiar with the basics of programming. So basic stuff like arrays, variables, strings, loops and if-then-else and branching are not explained here.</p>
<p><br></p>
<p><br/></p>
<p>A hello world EmuLua program looks like this:</p>
<p><br></p>
<p><br/></p>
<p>while (true) do</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;gui.text(50,50,"Hello world!");</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;emu.frameadvance();</p>
<p>end;</p>
<p><br></p>
<p><br/></p>
<p>When you load the script, the emulator will sort of go into pause mode and hand controls over to Lua (you!). Hence you are responsible for frameadvancing the emulator.</p>
<p>IF YOU DO NOT CALL emu.frameadvance AT THE CYCLE OF THE MAIN LOOP YOU WILL FREEZE THE EMULATOR! There. You have been warned. Don't worry though, you'll make this mistake at least once. Just force-quit the application and try again :)</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts28">Syntax</span></p>
<p><br></p>
<p><br/></p>
<p>Now then. Just like any other language, Lua has a few quirks you should be aware of.</p>
<p><br></p>
<p><br/></p>
<p>First of all, if's require a then and end. After a couple of days intensive Lua coding, I still make this mistake myself, but the Lua interpreter will prompt you of such errors on load, so don't worry too much about it. So:</p>
<p><br></p>
<p><br/></p>
<p>if (something) then</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;dostuff</p>
<p>end;</p>
<p><br></p>
<p><br/></p>
<p>Lua uses nil instead of null.</p>
<p><br></p>
<p><br/></p>
<p>There are only two values that evaluate to "false", these are "nil" and "false". ANYTHING else will evaluate to true, even 0 or the empty string.</p>
<p><br></p>
<p><br/></p>
<p>Comments are denoted by two consecutive dashes; --. Anything after it on the same line is a comment and ignored by Lua. There is no /* */ type of commenting in Lua.</p>
<p><br></p>
<p><br/></p>
<p>Variables have a local and global scope. You explicitly make a variable local by declaring it with the "local" keyword.</p>
<p><br></p>
<p><br/></p>
<p>somethingglobal; -- accessible by any function or flow</p>
<p>local something; -- only known to the same or deeper scope as where it was declared</p>
<p><br></p>
<p><br/></p>
<p>Note that variables declared in for loops (see below) are always considered local.</p>
<p><br></p>
<p><br/></p>
<p>Arrays are called tables in Lua. To be more precise, Lua uses associative arrays.</p>
<p><br></p>
<p><br/></p>
<p>Do not rely on the table.length() when your table can contain nil values, this function stops when it encounters a nil value, thus possibly cutting your table short.</p>
<p><br></p>
<p><br/></p>
<p>One experienced programmers will have to get used to is the table offset; tables start at index 1, not 0. That's just the way it is, deal with it.</p>
<p><br></p>
<p><br/></p>
<p>There are a few ways to create a table:</p>
<p><br></p>
<p><br/></p>
<p>local tbl1 = {}; -- empty table</p>
<p>local tbl2 = {"a","b","c","d"}; -- table with 5 strings</p>
<p>local tbl3 = {a=1,b=2,c=3}; -- associative table with 3 numbers</p>
<p>local tbl4 = {"a",b=2,c="x","d"=5}; -- associative table with mixed content</p>
<p><br></p>
<p><br/></p>
<p>Note that you can mix up the data in one table, as shown by tbl4.</p>
<p><br></p>
<p><br/></p>
<p>You can refer to table values in a few equivalent manners, using the examples above:</p>
<p><br></p>
<p><br/></p>
<p>tbl1[1] -- = nil because tbl1 is empty</p>
<p>tbl2[2] -- = "b"</p>
<p>tbl3["a"] -- = 1</p>
<p>tbl4.b -- = 2</p>
<p>tbl2.3 -- = "c"</p>
<p><br></p>
<p><br/></p>
<p>When the argument of a function is just a table, the parantheses "()" are optional. So for instance:</p>
<p><br></p>
<p><br/></p>
<p>processTable({a=2,b=3});</p>
<p><br></p>
<p><br/></p>
<p>Is equivalent to</p>
<p><br></p>
<p><br/></p>
<p>processTable{a=2,b=3};</p>
<p><br></p>
<p><br/></p>
<p>Another notation that's equivalent is</p>
<p><br></p>
<p><br/></p>
<p>filehandle.read(filehandle, 5);</p>
<p>filehandle:read(5);</p>
<p><br></p>
<p><br/></p>
<p>When using the colon notation ":" Lua will call the function adding the self-reference to the front of the parameterstack.</p>
<p><br></p>
<p><br/></p>
<p>Functions behave like objects and are declared in the follow manner:</p>
<p><br></p>
<p><br/></p>
<p>function doSomething(somevalue, anothervalue)</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;dostuffhere</p>
<p>end;</p>
<p><br></p>
<p><br/></p>
<p>So no curly braces "{}" !</p>
<p><br></p>
<p><br/></p>
<p>Some flow control:</p>
<p><br></p>
<p><br/></p>
<p>for i=0,15 do</p>
<p> &nbsp;-- do stuff here, i runs from 0 to 15 (inclusive!)</p>
<p>end;</p>
<p><br></p>
<p><br/></p>
<p>for key,value in pairs(table) do</p>
<p> &nbsp;-- do stuff here. pairs will iterate through the table, splitting the keys and values</p>
<p>end;</p>
<p><br></p>
<p><br/></p>
<p>while (somethingistrue) do</p>
<p><br></p>
<p><br/></p>
<p>end;</p>
<p><br></p>
<p><br/></p>
<p>if (somethingistrue) then</p>
<p><br></p>
<p><br/></p>
<p>end;</p>
<p><br></p>
<p><br/></p>
<p>if (somethingistrue) then</p>
<p><br></p>
<p><br/></p>
<p>else</p>
<p><br></p>
<p><br/></p>
<p>end;</p>
<p><br></p>
<p><br/></p>
<p>if (somethingistrue) then</p>
<p><br></p>
<p><br/></p>
<p>elseif (somethingelseistrue) then</p>
<p><br></p>
<p><br/></p>
<p>end;</p>
<p><br></p>
<p><br/></p>
<p>For comparison, you only have to remember that the exclamationmark is not used. Not equal "!=" is written like tilde-equals "~=" and if (!something) then ... is written with "not " in front of it; if (not something) then...</p>
<p><br></p>
<p><br/></p>
<p>For easy reference to the standard libraries look on the bottom half of this page: http://www.lua.org/manual/5.1/</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts28">Lua in FCEUX</span></p>
<p><br></p>
<p><br/></p>
<p>Now then, let's get to the emulator specifics!</p>
<p><br></p>
<p><br/></p>
<p>To load a Lua script in FCEU first load a rom (Lua can only do things after each frame cycle so load a rom first). Go to file, at the bottom choose Run Lua Script and select and load the file.</p>
<p><br></p>
<p><br/></p>
<p>When Lua starts, the emulator pauses and hands control over to Lua. Lua (that's you!) decides when the next frame is processed. That's why it's very common to write an endless while loop, exiting the main loop of a script will exit the script and hand control back to the emulator. This also happens when a script unexpectingly crashes.</p>
<p><br></p>
<p><br/></p>
<p>A bare script looks like this:</p>
<p><br></p>
<p><br/></p>
<p>while (true) do</p>
<p> &nbsp;emu.frameadvance();</p>
<p>end;</p>
<p><br></p>
<p><br/></p>
<p>And is about equal to not running Lua at all. The frameadvance function is the same called internally, so no loss of speed there!</p>
<p><br></p>
<p><br/></p>
<p>Bitwise operators:</p>
<p><br></p>
<p><br/></p>
<p>Lua does not have bitwise operators, so we supply some for you. These are common bitwise operators, nothing fancy.</p>
<p><br></p>
<p><br/></p>
<p>AND(a,b);</p>
<p>OR(a,b);</p>
<p>XOR(a,b);</p>
<p>BIT(n); -- returns a number with only bit n set (1)</p>
<p><br></p>
<p><br/></p>
<p>The emulator specific Lua is equal to the one of snes9x, with some platform specific changes (few buttons, for instance). </p>
<p>You can find the reference here: http://dehacked.2y.net/snes9x-lua.html</p>
<p>The following is a quick reference, you can go to the snes9x reference for more details.</p>
<p><br></p>
<p><br/></p>
<p>To paint stuff on screen, use the gui table. This contains a few predefined functions to manipulate the main window. For any coordinate, 0,0 is the top-left pixel of the window. You have to prevent out-of-bound errors yourself for now. If a color can be passed on, it is a string. HTML-syntax is supported ("#34053D"), as well as a FEW colors ("red", "green", "blue" ...).</p>
<p><br></p>
<p><br/></p>
<p>gui.text(x, y, str); -- Print a line to the window, you can use \n for a return but it will only work once</p>
<p>gui.pixel(x, y, color); -- plot a pixel at the given coordinate</p>
<p>gui.line(x1, y1, x2, y2, color); -- plot a line from x1,y1 to x2,y2</p>
@ -212,40 +212,40 @@
<p>gui.getpixel(x,y); -- return the values of the pixel at given position. Returns three numbers of the emulator image before paiting is applied.</p>
<p>gui.gdscreenshot(); -- Takes a screen shot of the image and returns it in the form of a string which can be imported by the gd library using the gd.createFromGdStr() function</p>
<p>(for more gd functions see DeHackED's reference: http://dehacked.2y.net/snes9x-lua.html)</p>
<p><br></p>
<p><br/></p>
<p>PAINTING IS ALWAYS ONE FRAME BEHIND! This is because the painting is done at the creation of the next frame, not while Lua is running.</p>
<p><br></p>
<p><br/></p>
<p>Emulator control:</p>
<p><br></p>
<p><br/></p>
<p>emu.frameadvance(); -- advances emulation ONE frame</p>
<p>emu.pause(); -- same as pressing the pause button</p>
<p>emu.speedmode(strMode); -- Supported are "normal","turbo","nothrottle","maximum". But know that except for "normal", all other modes will run as "turbo" for now.</p>
<p>emu.wait(); -- skips the emulation of the next frame, in case your script needs to wait for something</p>
<p><br></p>
<p><br/></p>
<p>Memory control:</p>
<p><br></p>
<p><br/></p>
<p>memory.readbyte(adr); -- read one byte from given address and return it. Besides decimal values Lua also allows the hex notation 0x00FA. In FCEUX reading is done BEFORE the cheats are applied!</p>
<p>memory.writebyte(adr, value); -- write one byte to the RAM of the NES. writing is done AFTER the hexeditor receives its values, so if you are freezing an address by Lua, it will not show in the hex editor (but it will in the game :)</p>
<p>memory.readbytesigned(adr); -- same as readbyte, except this returns a signed value, rather then an unsigned value.</p>
<p>memory.register(adr, function); -- binds a function to an address. The function will be called when an address changes. NOTE THAT THIS IS EXPENSIVE (eg.: slow)! Only one function allowed per address.</p>
<p><br></p>
<p><br/></p>
<p>Input control:</p>
<p><br></p>
<p><br/></p>
<p>You can read and write input by using the joypad table. A input table has the following (case sensitive) keys, where nil denotes they are not to be pressed: up down left right start select A B</p>
<p><br></p>
<p><br/></p>
<p>joypad.read(playern); -- get the input table for the player who's input you want to read (a number!)</p>
<p>joypad.write(playern, inputtable); -- set the input for player n. Note that this will overwrite any input from the user, and only when this is used.</p>
<p><br></p>
<p><br/></p>
<p>Savestates:</p>
<p><br></p>
<p><br/></p>
<p>You can load and save to the predefined savestates 1 ... 9 or create new "anonymous" savestates. You must first create a savestate object, which is your handle to a savestate. Then you can pass this handle on to savestate.load or save to do so.</p>
<p><br></p>
<p><br/></p>
<p>savestate.create(n); -- n is optional. When supplied, it will create a savestate for slot n, otherwise a new (anonymous) savestate object is created. Note that this does not yet save or load anything!</p>
<p>savestate.load(state); -- load the given savestate</p>
<p>savestate.save(state); -- save the given savestate</p>
<p><br></p>
<p><br/></p>
<p>For an up-to-date list of functions, see the <a class="rvts18" href="LuaFunctionsList.html">Lua Functions List</a>.</p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour/iphone-website-generation">Create iPhone web-based documentation</a></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour">Easily create Web Help sites</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>Config</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -49,60 +49,60 @@
<div id="topic_content">
<p><span class="rvts17">The Config Menu</span></p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p>These chapters explain options under FCEUX's Config menu.</p>
<p><br></p>
<p><br/></p>
<p><a class="rvts34" href="ToggleSwitchesHideMenuetc.html">Menu Items &amp; Sub-menus</a></p>
<p><br></p>
<p><br/></p>
<p>Explains the basic menu items and sub-menu items in the top of the menu.</p>
<p><br></p>
<p><br/></p>
<p><a class="rvts34" href="GUI.html">GUI</a></p>
<p><br></p>
<p><br/></p>
<p>Settings related to the FCEU emulator window.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><a class="rvts34" href="Directories.html">Directories</a></p>
<p><br></p>
<p><br/></p>
<p>Sets Directory override assignments.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><a class="rvts34" href="Input.html">Input</a></p>
<p><br></p>
<p><br/></p>
<p>Assigns keys/joypad buttons to emulated controllers.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><a class="rvts34" href="NetworkPlay.html">Network Play</a></p>
<p><br></p>
<p><br/></p>
<p>Various settings related to playing over the internet.</p>
<p><br></p>
<p><br/></p>
<p><a class="rvts34" href="Palette.html">Palette</a></p>
<p><br></p>
<p><br/></p>
<p>Palette options.</p>
<p><br></p>
<p><br/></p>
<p><a class="rvts34" href="SoundOptions.html">Sound</a></p>
<p><br></p>
<p><br/></p>
<p>Sets sound configuration options.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><a class="rvts34" href="Timing.html">Timing</a></p>
<p><br></p>
<p><br/></p>
<p>Settings related to emulation timing.</p>
<p><br></p>
<p><br/></p>
<p><a class="rvts26" href="Video.html">Video</a></p>
<p><br></p>
<p><br/></p>
<p>Sets video &amp; graphics configuration options.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><a class="rvts34" href="MovieOptions.html">Movie Options</a></p>
<p><br></p>
<p><br/></p>
<p>Sets options related to playing/recording movie files</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><a class="rvts34" href="MapHotkeys.html">Map Hotkeys</a></p>
<p><br></p>
<p><br/></p>
<p>Sets Hotkey assignments.</p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour">Full featured Help generator</a></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour">Easily create Help documents</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>Context Menu Items</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -53,135 +53,135 @@
<div id="topic_content">
<p><span class="rvts17">Context Menu</span></p>
<p><br></p>
<p><br/></p>
<p>FCEUX includes a context menu that allows commonly used menu functions for various situations. &nbsp;There are some functions that appear only here.</p>
<p><br></p>
<p><br/></p>
<p>This page describes all the possible menu items in each possible context situation.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts16">No game loaded.</span></p>
<p><br></p>
<p><br/></p>
<p>Appears when no game is loaded.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts10">Open ROM</span></p>
<p>Same as the File &gt; Open ROM option</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts10">Last ROM used</span></p>
<p>Opens the most recently used file from the Recent Files Menu</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts10">Help</span></p>
<p>Brings up the Getting Started chapter in the help document.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts16">Game Loaded</span></p>
<p><br></p>
<p><br/></p>
<p>Appears when a game is loaded, but not a movie (.fm2).</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts10">Play Movie...</span></p>
<p>Same as the File &gt; Movie &gt; Play Movie menu item.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts10">Record Movie...</span></p>
<p>Same as the File &gt; Movie &gt; Record Movie menu item.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts10">Undo savestate</span></p>
<p>If this option is enabled it means the last savestate saved over-wrote a previous savestate file. &nbsp;This option restores the previous savestate file.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts10">Redo savestate</span></p>
<p>If this option is in the menu, it means that Undo savestate was recently used to restore a previous savestate. &nbsp;This reverts that change.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts10">Rewind to last auto-save</span></p>
<p>Auto-save must be enabled for this menu item to be accessible. &nbsp;Same as the Load last auto-save Hotkey Item. &nbsp;It loads the last auto-savestate. &nbsp;Auto-savestates are created once about every 4 seconds, so this typically has the effect of rewinding emulation.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts10">Screenshot</span></p>
<p>Same as File &gt; Screenshot.</p>
<p><span class="rvts10"><br></span></p>
<p><span class="rvts10"><br/></span></p>
<p><span class="rvts10">Close ROM</span></p>
<p>Same as File &gt; Close</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts16">Movie loaded - Read-only</span></p>
<p><br></p>
<p><br/></p>
<p>Appears when a movie is loaded and Read-only mode is set.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts10">Toggle to read+write</span></p>
<p>Sets Read status to Read+Write.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts10">Play Movie from Beginning</span></p>
<p>Same as File &gt; Movie &gt; Play from Beginning. &nbsp;Turns Read status to Read-Only and plays the movie from frame 1.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts10">Stop Movie Replay</span></p>
<p>Same as File &gt; Movie &gt; Stop Movie.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts10">View comments and subtitles</span></p>
<p>Opens up the Metadata dialog. &nbsp;Same as the Metadata button on the Play movie dialog.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts10">Undo savestate</span></p>
<p>If this option is enabled it means the last savestate saved over-wrote a previous savestate file. &nbsp;This option restores the previous savestate file.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts10">Redo savestate</span></p>
<p>If this option is in the menu, it means that Undo savestate was recently used to restore a previous savestate. &nbsp;This reverts that change.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts10">Rewind to last auto-save</span></p>
<p>Auto-save must be enabled for this menu item to be accessible. &nbsp;Same as the Load last auto-save Hotkey Item. &nbsp;It loads the last auto-savestate. &nbsp;Auto-savestates are created once about every 4 seconds, so this typically has the effect of rewinding emulation.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts10">Help</span></p>
<p>Opens the Movie recording chapter of the help document.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts16">Movie loaded - Read + Write</span></p>
<p><br></p>
<p><br/></p>
<p><span class="rvts10">Toggle to Read-only</span></p>
<p>Sets Read status to Read-Only.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts10">Play Movie From Beginning</span></p>
<p>Same as File &gt; Movie &gt; Play from Beginning. &nbsp;Turns Read status to Read-Only and plays the movie from frame 1.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts10">Stop Movie Recording</span></p>
<p>Same as File &gt; Movie &gt; Stop Movie.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts10">View comments and subtitles</span></p>
<p>Opens up the Metadata dialog. &nbsp;Same as the Metadata button on the Play movie dialog.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts10">Make backup</span></p>
<p>Generates a backup .fm2. &nbsp;Uses the same file naming system as the auto-movie backup. &nbsp;(See <a class="rvts18" href="MovieOptions.html">movie options</a> for details).</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts10">Undo savestate</span></p>
<p>If this option is enabled it means the last savestate saved over-wrote a previous savestate file. &nbsp;This option restores the previous savestate file.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts10">Redo savestate</span></p>
<p>If this option is in the menu, it means that Undo savestate was recently used to restore a previous savestate. &nbsp;This reverts that change.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts10">Undo loadstate</span></p>
<p>If this option is enabled it was because the Loadstate function was called sometime while the game was loaded. &nbsp;This function restores the game state to where it was before loadstate was called.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts10">Redo loadstate</span></p>
<p>If Undo loadstate was called, this option is available. &nbsp;It reverts the change and restores the game back to the point it was when loadstate was called.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts10">Help</span></p>
<p>Opens the Movie recording chapter of the help document.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts10">Additional items may also appear related to these situations:</span></p>
<p><br></p>
<p><br/></p>
<p><span class="rvts16">Lua</span></p>
<p><br></p>
<p><br/></p>
<p><span class="rvts10">Load last Lua</span></p>
<p>If there is at least 1 filename in the Recent Lua Files menu this calls the most recently used Lua script file. &nbsp;Has the same effect as the File &gt; Lua &gt; Reload Lua Script menu item.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts10">Stop Lua</span></p>
<p>If a Lua script is currently loaded this option is available. &nbsp;Same as File &gt; Lua &gt; Stop Lua Script.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts16">Hide Menu</span></p>
<p><br></p>
<p><br/></p>
<p><span class="rvts10">Unhide menu</span></p>
<p>If the main FCEUX menu is hidden this option is available. Restores the main menu.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts16">Subtitles</span></p>
<p><br></p>
<p><br/></p>
<p>If a movie is loaded and has subtitles, </p>
<p>a toggle subtitles option will be in the menu</p>
<p>a Dump to SRT file option will be available. &nbsp;This dumps the subtitles to a standard subtitle file compatible with A/V containers such as .mkv</p>
<p><br></p>
<p><br></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour/iphone-website-generation">Create iPhone web-based documentation</a></p>
<p><br/></p>
<p><br/></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/create-epub-ebooks">Full featured EBook editor</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>Convert fcm</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -53,13 +53,13 @@
<div id="topic_content">
<p><span class="rvts17">Converting .fcm to .fm2 files</span></p>
<p><br></p>
<p><br/></p>
<p>FCEUX uses a new movie file format (.fm2). &nbsp;In order to use movie files frame previous FCE Ultra versions (.fcm) you will need to convert to .fm2 first.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts16">Using .fcm Convert</span></p>
<p><br></p>
<p><br/></p>
<p>To use it simply highlight it. &nbsp;Then select the .fcm you wish to convert (or shift+click to select multiple .fcm files). &nbsp;Then click Open to have the select files converted. &nbsp;All files selected will have a matching .fm2 file copied into the same folder.</p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour">Easily create HTML Help documents</a></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour">Full featured Help generator</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>Customizing through the Config File</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -53,39 +53,39 @@
<div id="topic_content">
<p><span class="rvts17">Customizing through the Config File</span></p>
<p><br></p>
<p><br/></p>
<p>There are some options that can only be done by directly editing the config (fceux.cfg) file. &nbsp;All of those options are documented here.</p>
<p><br></p>
<p><br/></p>
<p>The .cfg file is a text file and can be opened by any text editor (just as wordpad).</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts16">Emulator background Color when Graphics Background is disabled</span></p>
<p><br></p>
<p><br/></p>
<p><span class="rvts32">gNoBGFillColor</span></p>
<p><span class="rvts22"><br></span></p>
<p><span class="rvts22"><br/></span></p>
<p><span class="rvts22">When you disable the backgrounds (Config &gt; Display &gt; Graphics: GB), the default color is black. &nbsp;You can change that color by modifying this value. &nbsp;By default it is 255 (black).</span></p>
<p><span class="rvts22"><br></span></p>
<p><span class="rvts22"><br/></span></p>
<p><span class="rvts23">Hex Editor</span></p>
<p><span class="rvts22"><br></span></p>
<p><span class="rvts22"><br/></span></p>
<p><span class="rvts22">HexRowHeightBorder 0</span></p>
<p><span class="rvts22"><br></span></p>
<p><span class="rvts22"><br/></span></p>
<p><span class="rvts22">This value determines the number of pixels between each row of values in the Hex Editor. &nbsp;By default it is 0.</span></p>
<p><span class="rvts22"><br></span></p>
<p><span class="rvts22"><br/></span></p>
<p><span class="rvts22">HexBackColorR 255</span></p>
<p><span class="rvts22">HexBackColorG 255</span></p>
<p><span class="rvts22">HexBackColorB 255</span></p>
<p><span class="rvts22"><br></span></p>
<p><span class="rvts22"><br/></span></p>
<p><span class="rvts22">HexForeColorR 0</span></p>
<p><span class="rvts22">HexForeColorG 0</span></p>
<p><span class="rvts22">HexForeColorB 0</span></p>
<p><span class="rvts22"><br></span></p>
<p><span class="rvts22"><br/></span></p>
<p><span class="rvts22">HexFreezeColorR 0</span></p>
<p><span class="rvts22">HexFreezeColorG 0</span></p>
<p><span class="rvts22">HexFreezeColorB 255</span></p>
<p><span class="rvts22"><br></span></p>
<p><span class="rvts22"><br/></span></p>
<p><span class="rvts22">These values allows are the Hex Editor color scheme values (RGB). &nbsp;The background color is 255,255,255 (white) by default. &nbsp;The foreground color (text) is 0,0,0 (black) by default. &nbsp;When an address is frozen it is 0,0,255 (blue) by default.</span></p>
<p><span class="rvts22"><br></span></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/help-authoring-tool">Create HTML Help, DOC, PDF and print manuals from 1 single source</a></p>
<p><span class="rvts22"><br/></span></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour">Easily create HTML Help documents</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>Debug</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -49,46 +49,46 @@
<div id="topic_content">
<p><span class="rvts17">Debug</span></p>
<p><br></p>
<p><br/></p>
<p>Guides for the specific tools and settings under FCEUX's Debug menu.</p>
<p><br></p>
<p><br/></p>
<p><a class="rvts44" href="Debugger.html">Debugger</a></p>
<p><br></p>
<p><br/></p>
<p>A tool for looking at game instructions in assembly language. With experience,</p>
<p>one can use it to fix game patching errors, or find RAM and Game Genie codes.</p>
<p><br></p>
<p><br/></p>
<p><a class="rvts44" href="PPUViewer.html">PPU Viewer</a></p>
<p><br></p>
<p><br/></p>
<p>A tool that displays the current PPU contents and related information. The PPU</p>
<p>viewer allows you to view the graphic squares that make up what's displayed.</p>
<p><br></p>
<p><br/></p>
<p><a class="rvts44" href="NameTableViewer.html">Name Table Viewer</a></p>
<p><br></p>
<p><br/></p>
<p>A tool for displaying the current Name Table contents. Helps to isolate PPU</p>
<p>and tile information, which allows the debugger to be used to check PPU coding.</p>
<p><br></p>
<p><br/></p>
<p><a class="rvts44" href="HexEditor.html">Hex Editor</a></p>
<p><br></p>
<p><br/></p>
<p>A tool for displaying a game's RAM contents and for memory poking. Also allows</p>
<p>for reading in the raw PPU data, copy/paste-ing RAM, and visually debugging RAM.</p>
<p><br></p>
<p><br/></p>
<p><a class="rvts44" href="TraceLogger.html">Trace Logger</a></p>
<p><br></p>
<p><br/></p>
<p>Captures assembly code instructions and outputs them to a file or the window. Very</p>
<p>useful for modifying code, finding crash addresses, fixing transferred routines, and</p>
<p>useful for analyzing code, finding crash addresses, fixing transferred routines, and</p>
<p>for comparing routine function between a game and a persistently buggy NSF.</p>
<p><br></p>
<p><br/></p>
<p><a class="rvts44" href="CodeDataLogger.html">Code/Data Logger</a></p>
<p><br></p>
<p><br/></p>
<p>Allows you to extract the data used by a game. Make patch demos, find data</p>
<p>loaded by a game around a certain point, or just map out a single routine run.</p>
<p><br></p>
<p><br/></p>
<p><a class="rvts26" href="GameGenieEncoderDecoder.html">Game Genie Encoder/Decoder</a></p>
<p><br></p>
<p><br/></p>
<p>Allows you to add Game Genie codes to the Cheats menu, decode existing</p>
<p>ones to their component information, and (re)create a code with desired values.</p>
<p><br></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour">Easily create PDF Help documents</a></p>
<p><br/></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour/create-ebooks-for-amazon-kindle">Produce Kindle eBooks easily</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>Debugger</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -53,37 +53,45 @@
<div id="topic_content">
<p><span class="rvts17">Debugger</span></p>
<p><br></p>
<p><br/></p>
<p>Taken from the FCEUXDSP 1.07 documentation.</p>
<p><br></p>
<p>More stuff added by AnS.</p>
<p><br/></p>
<p><span class="rvts12">Introduction</span></p>
<p><br></p>
<p><br/></p>
<p>The debugger is a powerful tool that reads, displays, and manipulates assembly language instructions in a game.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts16">Debugger Features</span></p>
<p><br></p>
<p>-When you hold the mouse over the left pane in the debugger, you can now see the ROM file address of the data loaded there.</p>
<p>-Right-click in that pane, it will bring up the Hex Editor at that address so you can immediately begin editing. </p>
<p>-Left-clicking in that pane brings up the inline assembler. </p>
<p>-"Break on bad opcode" feature; this can help you figure out where your game is crashing. Middle-clicking on a byte will bring up the <a class="rvts18" href="GameGenieEncoderDecoder.html">Game Genie Encoder</a> at that address, so you can easily make Game Genie codes.</p>
<p>-Debugging data like breakpoints or bookmarks are automatically saved and restored when games are closed / opened.</p>
<p>-Ability to give breakpoints a brief description/name. </p>
<p>-All debugging information for addresses &lt; $8000 into the name list file romname.nes.ram.nl.</p>
<p>-Added a feature to NL files to support arrays.</p>
<p>-Range options for freezing / unfreezing addresses</p>
<p>-Dump RAM to file option</p>
<p>-Dump PPU memory to file option</p>
<p>-Automatically generated .deb debug files created if the debugger is used.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<ul style="text-indent: 0px; margin-left: 24px; list-style-position: outside;">
<li>When you hover the mouse cursor over the left pane in the debugger, at the bottom of Debugger window you can see the ROM file address of the data loaded there.</li>
<li>Right-click in that pane, it will bring up the Hex Editor at that address so you can immediately begin editing RAm or ROM data.</li>
<li>Left-click in that pane brings up the inline assembler (only if you point at ROM address)</li>
<li>Middle-click on a byte will bring up the <a class="rvts18" href="GameGenieEncoderDecoder.html">Game Genie Encoder</a> at that address, so you can easily make Game Genie codes.</li>
<li>"Break on bad opcode" feature; this can help you figure out where your game is crashing.</li>
<li>Debugging data like Breakpoints or Address Bookmarks are automatically saved in .DEB files and restored when games are closed / opened.</li>
<li>Ability to give Breakpoints a brief description/name.</li>
<li>All debugging information for addresses &lt; $8000 into the name list file romname.nes.ram.nl.</li>
<li>Added a feature to NL files to support arrays.</li>
<li>Range options for freezing / unfreezing addresses.</li>
<li>Dump RAM to file option.</li>
<li>Dump PPU memory to file option.</li>
<li>Cycles and Instructions counters can be used for profiling, writing synchronized code and making breakpoints based on the counter value.</li>
<li>When you need to quickly advance emulation to a given line of code, doubleclick on the line in Disassembly window, the "Add Execute breakpoint here" dialog will appear, click "OK" and then make "Run", soon Debugger will break at this line and you can "Delete" the breakpoint.</li>
<li>Stack window displays actual data from current Stack Pointer up to 0x1FF</li>
<li>"Scanline" shows current scanline number: -1 it means Prerender time, 240 is Idle scanline, 0-239 are visible scanlines, 241-260/310 are VBlank scanlines</li>
<li>After the Debugger snaps (either by hitting a breakpoint or when you press any "Step ..." button), you can unpause emulator by pressing Run button or using Pause hotkey. Also you can use Frame Advance key to unpause the emulator for only one frame.</li>
</ul>
<p><br/></p>
<p><br/></p>
<p><span class="rvts12">Using Debugger</span></p>
<p><br></p>
<p><br/></p>
<p><span class="rvts16">Symbolic Debugging</span></p>
<p><br></p>
<p><br/></p>
<p>The most important feature (at least for me) that was introduced in FCEUXD SP is symbolic debugging. &nbsp;With this new feature it's possible to rename addresses in the disassembly window (like $C022) to easily understandable names (like AddHealthpoints). It's also possible to add comments to lines in the disassembly window.</p>
<p><br></p>
<p><br/></p>
<p>To be able to use this feature it's necessary to create so called name list files (*.(bank).nl/*.ram.nl, Ex: NES Test Cart (PD).nes.0.nl, NES Test Cart (PD).nes.ram.nl) which contain all names and comments you wish to display in the disassembly window. These files are plain ASCII files of the following format (example follows):</p>
<p><br></p>
<p><br/></p>
<p>$C000#NewName1#Comment1</p>
<p>$C002##Comment2</p>
<p>$C004#NewName2#</p>
@ -91,9 +99,9 @@
<p>\MultilineComment-Part2</p>
<p>\MultilineComment-Part3</p>
<p>$C008/10#NewName4#</p>
<p><br></p>
<p><br/></p>
<p>Every line contains two # characters which separate the three parts of one line: The first part (starting with a $ character) is the address to be renamed. Optionally you can add a "/number" part which marks the offsets as a beginning of an array of the given size (the size must be specified in hex form). &nbsp;The second (optional) part is the new name of that address. Whenever the line of that address is shown in the disassembly window an extra line saying "Name: NewName" is shown above it. &nbsp;Instructions referencing this address, for example JSR $C000 are also changed to JSR NewName1 (in that example). &nbsp;The third (optional) part is the comment that's also added above the disassembly line the comment refers to. It works exactly like the additional name line, only the prefix of that line is different. Comment lines start with "Comment: " rather than with "Name: ". &nbsp;Multi-lines comments are possible. Lines starting with a \ character are just appended to the comment of the preceding line. Multi-line comments are also shown in multiple lines in the disassembly window.</p>
<p><br></p>
<p><br/></p>
<p>Let's get back to the example.</p>
<p>The first line contains all three parts. Using this name list file all references to the address</p>
<p>$C000 are replaced with NewName1 and whenever line $C000 is shown in the disassembly window an</p>
@ -101,7 +109,7 @@
<p>The second line defines only a comment while the third line defines only a name. Following that</p>
<p>there's a multi-line comment definition for address $C006.</p>
<p>The last line defines an array called NewName4 of size $10 (= 16) bytes starting at offset $C008.</p>
<p><br></p>
<p><br/></p>
<p>Now you know the format of the nl files but you do not yet know the naming convention for the</p>
<p>file names. Due to the bank-swapping nature of the NES it's getting a little bit difficult here.</p>
<p>Each bank needs it's own nl file. The naming convention goes like this: Take the name of the ROM</p>
@ -109,31 +117,34 @@
<p>ROM bank. Suppose you have the ROM file "Faxanadu (U).nes" and you want to create a nl file for</p>
<p>ROM bank 15. As 15 is 0x0F in hex the name of the nl file would be "Faxanadu (U).nes.F.nl". All</p>
<p>nl files go into the same directory as the ROM file itself.</p>
<p><br></p>
<p><br/></p>
<p>There is also the *.ram.nl file specification, which allows you to substitute RAM addresses for</p>
<p>execution addresses, and have those named as well. In this case, you could use lines of this type:</p>
<p>$00A5#Mic Test OK#00=Not Passed, 01=Passed</p>
<p><br></p>
<p><br/></p>
<p>You can enable and disable symbolic debugging by clicking the checkbox "Symbolic Debugging" in</p>
<p>the debugger window. To forcibly reload the nl files of the currently active ROM file press the</p>
<p>button with the text "Reload Symbols".</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts16">Arrays</span></p>
<p><br></p>
<p><br/></p>
<p>The array feature is an easy way to group names and comments for sequential offsets.</p>
<p><br></p>
<p><br/></p>
<p>$C000/5#NewName1#Comment1</p>
<p><br></p>
<p><br/></p>
<p>is equivalent to</p>
<p><br></p>
<p><br/></p>
<p>$C000#NewName1#Comment1</p>
<p><span class="rvts12"><br></span></p>
<p><br></p>
<p><span class="rvts12"><br/></span></p>
<p><br/></p>
<p><span class="rvts16">Inline Assembler</span></p>
<p><br></p>
<p>The debugger an Inline Assembler designed by Parasyte. &nbsp;To activate it, left-click in the left pane of the debugger, beside the assembly display. &nbsp;To use it, type in some code and press Enter to add it to the patch list. If you make a mistake, press "Undo". &nbsp;Once the patch is set up the way you want it, press "Apply". Be aware that this cannot be undone unless you reload the ROM. &nbsp;Parasyte implemented this feature before I had the Hex Editor working, otherwise I would have implemented a way to undo it from there. &nbsp;Press "Save" to write to the ROM file on disk; note that this will also save any changes you may have done in the Hex Editor.</p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/help-authoring-tool">Full featured multi-format Help generator</a></p>
<p><br/></p>
<p>The debugger has an Inline Assembler designed by Parasyte. &nbsp;To activate it, left-click in the left pane of the debugger, beside the assembly display. &nbsp;To use it, type in some code and press Enter to add it to the patch list. If you make a mistake, press "Undo". &nbsp;Once the patch is set up the way you want it, press "Apply". Be aware that this cannot be undone unless you reload the ROM. &nbsp;Parasyte implemented this feature before I had the Hex Editor working, otherwise I would have implemented a way to undo it from there. &nbsp;Press "Save" to write to the ROM file on disk; note that this will also save any changes you may have done in the Hex Editor.</p>
<p><br/></p>
<p><br/></p>
<p><br/></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/create-epub-ebooks">Full featured EBook editor</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>Debugger Usage Guide (Intermediate)</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -53,68 +53,70 @@
<div id="topic_content">
<p><span class="rvts17">Debugger Usage (Intermediate)</span></p>
<p><br></p>
<p><br/></p>
<p><span class="rvts12">Intent</span></p>
<p><br></p>
<p><br/></p>
<p>This guide assumes that you have a working knowledge of how to interpret Assembly instructions, and are willing to look up the table of 6502 instructions on your own. This document describes the debugger, and to a much lesser degree, how to tell it what you want to do in terms of the assembly.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts12">Main Window</span></p>
<p><br></p>
<p><br/></p>
<p>In the main window, you'll see lines like this on the left:</p>
<p>1E:80E5:66 FF &nbsp; &nbsp; ROR $00FF = #$9A</p>
<p><br></p>
<p>This is the disassembly area.</p>
<p><br></p>
<p>On the right are Breakpoints, the stack address and partial contents, status flags, PC and registers, and several buttons and text boxes. Not all buttons and features will be described, simply because one can't write about what one hasn't used.</p>
<p><br></p>
<p><br/></p>
<p>This is the disassembly area. The "&gt;" shows current line (usually it's the topmost line).</p>
<p><br/></p>
<p>On the right are Breakpoints, the stack window, status flags, PC and registers data, PPU state data, and several buttons and text boxes.</p>
<p><br/></p>
<p>Of the buttons, the one's you'll likely use the most are Run, Step Into, and Step Out.</p>
<p><br></p>
<p>Run simply makes the program continue operating until it hits a condition that causes it to stop running.</p>
<p><br></p>
<p>Step Into allows you to move to the next line, and if you Step Into a JSR, you'll be taken to the address listed for it to continue running.</p>
<p><br></p>
<p>Step Out attempts to run until the debugger is outside of the function you Stepped Into. This doesn't always work, and may appear to make the emulator 'Run' instead. The next time you use Step Out, it will tell you it will erase the old Step Out watch to do the new one. Press OK to do so.</p>
<p><br></p>
<p>Other buttons include Step Over, which basically tries to run to the PC address after the JSR, Run Line, which runs a single VBlank line, 128 lines, which is the last button's action 128 times, "Seek To:" and a text box, which lets you move around the disassembly window quickly, and Seek PC, which orients you back to the code to be run without doing anything else.</p>
<p><br></p>
<p><br/></p>
<p>"Run" simply makes the program continue operating until it hits a condition that causes it to stop running, or until you stop it manually.</p>
<p><br/></p>
<p>"Step Into" allows you to move to the next line, and if you Step Into a JSR, you'll be taken to the address listed for it to continue running.</p>
<p><br/></p>
<p>"Step Out" attempts to run until the debugger is outside of the function you Stepped Into. This doesn't always work, and may appear to make the emulator 'Run' instead. The next time you use Step Out, it will tell you it will erase the old Step Out watch to do the new one. Press OK to do so.</p>
<p><br/></p>
<p>Other buttons include "Step Over", which basically tries to run to the PC address after the JSR, Run Line, which runs a single VBlank line, 128 lines, which is the last button's action 128 times, "Seek To:" and a text box, which lets you move around the disassembly window quickly, and Seek PC, which orients you back to the code to be run without doing anything else.</p>
<p><br/></p>
<p>Interpreting the line below is as follows:</p>
<p>1E:80E5:66 FF &nbsp; &nbsp; ROR $00FF = #$9A</p>
<p><br></p>
<p><br/></p>
<p>(1E:) is the bank used. A bank is 0x4000 in size for a .NES file(and 0x1000 for a .NSF file, but don't worry about this for now). 80E5, masked with 3FFF, equals 00E5. 0x1E multiplied by 4000 is 0x78000. Together, this gives 0x78000 + 0x00E5, which equals the address 0x780E5. Add 0x10 to this to account for the 0x10 byte .NES header, and you get 0x780F5, which is what the address is within the .NES file. That is all that this piece of information means.</p>
<p><br></p>
<p><br/></p>
<p>1E:(80E5) is the address that the data that follows is being read from. The banking stated above allows the same address to show different data, but (1E:80E5) will always be the same address on the same page of data.</p>
<p><br></p>
<p><br/></p>
<p>1E:80E5:(66 FF &nbsp; &nbsp; ROR $00FF) is the byte code for ROR, followed by the parameter that tells it to use $00FF. After that is the interpreted assembly code. Note that just because code can be interpreted doesn't mean that it can be run. Even data that's for graphics will inevitable look like code to a certain degree to the disassembly window.</p>
<p><br></p>
<p><br/></p>
<p>1E:80E5:66 FF &nbsp; &nbsp; ROR $00FF( = #$9A) tells you what the value of $00FF is. $00FF refers to 00FF in RAM, and the value is 0x9A. If the program points to an address in ROM instead of RAM, it still shows the value for you.</p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts12">Breakpoints</span></p>
<p><br></p>
<p>The breakpoint buttons are Add, Delete, and Edit. These should be self-explanatory. Delete removes the selected code. Edit will allow you to change an existing entry with the same window as you use to Add. Add will open an empty window, which allows you to fill in several details. Double-clicking a breakpoint will enable and disable it, so you don't have to delete items to stop them from causing the debugger to halt the game(the short term for this is called 'breaking' the debugger, referred to in the same way as one would refer to a broken vase)</p>
<p><br></p>
<p><br/></p>
<p>The breakpoint buttons are Add, Delete, and Edit. These should be self-explanatory. Delete removes the selected breakpoint. Edit will allow you to change an existing entry. Add will open an empty window, which allows you to fill in several details. Double-clicking a breakpoint will enable and disable it, so you don't have to delete items to stop them from causing the debugger to halt the game (the short term for this is called 'breaking' the debugger, referred to in the same way as one would refer to a broken vase). Above the breakpoints list there's current number of enabled breakpoints and total number of breakpoints in the list.</p>
<p><br/></p>
<p>In the Add Breakpoint window, you have 2 Address boxes [ ] - [ ]. You must put in at least 1 value, preferable in the left box. If you want to use a range of values, you can fill in the first box as the start, and the second box as the end. The addresses can be either RAM (0000-07FF), ROM (8000-FFFF), or the special addresses(6000-7FFF, which can be extra RAM, ROM, or unused, depending on game)</p>
<p><br></p>
<p><br/></p>
<p>The Read, Write, and Execute checkboxes allow you to specify whether to break the debugger when that address is Read From, Written To, or Executed by the CPU. All of them can be checked at the same time if you don't know how the data is used, but are sure it's used somehow. Note that if it's the value to an assembly instruction, it won't cause a break, because the byte itself isn't the start of an instruction, and isn't read by the CPU so much as used for an instruction.</p>
<p><br></p>
<p>The Option boxes CPU Mem, PPU Mem, and Sprite Mem tell the debugger where to look. The Hex Viewer will show you CPU Mem by default, and PPU Mem if you tell it to. PPU Mem is where data is written to display the actual images on the screen, rather than to decide what it is that should be put there. My own experience is that this won't have to be touched unless you accidentally click off of CPU Mem. PPU debugging is more of an advanced skill, primarily because when something does go wrong, it's usually because an address outside of the normal PPU address is getting written to and causing very weird graphics errors.</p>
<p><br></p>
<p>Name is simply a name that can be seen to the right, if there's space for it.</p>
<p><br></p>
<p>The forbid option allows you to exclude a range of RAM or ROM from the breakpoint list. These can be enabled and disabled as of this writing.</p>
<p><br></p>
<p>Condition is part of the Conditional Debugging system. This system is slightly complicated, and extremely powerful when used correctly, and can make extremely hard problems to debug turn into lazy clicking when you understand how to use the feature.</p>
<p><br></p>
<p><br/></p>
<p>The Option boxes CPU Mem, PPU Mem, and Sprite Mem tell the debugger where to look. The Hex Editor shows CPU Mem by default, but it can show you PPU Mem if you tell it to. PPU Mem is where data is written to display the actual images on the screen, rather than to decide what it is that should be put there. PPU debugging is more of an advanced skill, primarily because when something does go wrong, it's usually because an address outside of the normal PPU address is getting written to and causing very weird graphics errors.</p>
<p><br/></p>
<p>Name is simply a description for the breakpoint that can be seen to the right, if there's space for it.</p>
<p><br/></p>
<p>The "Forbid" option allows you to exclude a range of RAM or ROM from the breakpoint list. These can be enabled and disabled as well.</p>
<p><br/></p>
<p>Condition is part of the Conditional Debugging system. This system is slightly complicated, and extremely powerful when used correctly, and can make extremely hard problems turn into lazy clicking when you understand how to use the feature.</p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts12">Conditional Debugging</span></p>
<p><span class="rvts22"><br></span></p>
<p><span class="rvts22"><br/></span></p>
<p><span class="rvts22">Conditions only apply to the breakpoint they are applied to. You can breakpoint the same address multiple times with different conditions applied to each one.</span></p>
<p><span class="rvts22"><br></span></p>
<p><span class="rvts22"><br/></span></p>
<p><span class="rvts22">Registers: A, X, Y, (P = PC) (A==#12, to break if A = 12) (P!=#804C to NOT break when the PC is on 804C)</span></p>
<p><span class="rvts22">Flags: N, C, Z, I, B, V, U, D (N==#0 for off, N==#1 for on)</span></p>
<p><span class="rvts22">Bank: K (K!=#1E to NOT break when the bank is 1E)</span></p>
<p><span class="rvts22"><br></span></p>
<p><span class="rvts22"><br/></span></p>
<p><span class="rvts22">Addresses: ($0000!=#00 makes it test RAM address 0000, and if it's NOT 00, it can break)</span></p>
<p><span class="rvts22">Numbers: (#0123 is interpreted as 123. It can be used in tests for known values to exclude or include)</span></p>
<p><span class="rvts22"><br></span></p>
<p><span class="rvts22"><br/></span></p>
<p><span class="rvts22">Numerical Comparisons:</span></p>
<p><span class="rvts22">== = Equal</span></p>
<p><span class="rvts22">!= = Not Equal</span></p>
@ -122,21 +124,21 @@
<p><span class="rvts22">&gt;= = Greater Than or Equal</span></p>
<p><span class="rvts22">&lt; Less Than</span></p>
<p><span class="rvts22">&gt; Greater Than</span></p>
<p><span class="rvts22"><br></span></p>
<p><span class="rvts22"><br/></span></p>
<p><span class="rvts22">Math Operators:</span></p>
<p><span class="rvts22">+, -, *, / (which are add, subtract, multiply, divide)</span></p>
<p><span class="rvts22">If you want to do complex math that involves 5 memory addresses, 2 ROM addresses, and a smattering of defined values, you can use these to do it. I've never had to, but if you want to, this is how.</span></p>
<p><span class="rvts22"><br></span></p>
<p><span class="rvts22"><br/></span></p>
<p><span class="rvts22">Multiple Tests:</span></p>
<p><span class="rvts22">(N==#0||A!=#0 makes it break if EITHER N is off, or A isn't 00)</span></p>
<p><span class="rvts22">(A!=#0&amp;&amp;X==#a5 makes it break is A isn't 00, AND X is A5)</span></p>
<p><span class="rvts22"><br></span></p>
<p><span class="rvts22"><br/></span></p>
<p><span class="rvts22">Brackets:</span></p>
<p><span class="rvts22">$[#2CC + X] == #34: The value of the byte at address $2CC + X is 0x34</span></p>
<p><span class="rvts22"><br></span></p>
<p><span class="rvts22"><br/></span></p>
<p><span class="rvts22">Parentheses:</span></p>
<p><span class="rvts22">(#1 + #2)==#3 (This evaluates to true, so the breakpoint can break. If you need a different order of operation for math operators, you can use parentheses)</span></p>
<p><span class="rvts22"><br></span></p>
<p><span class="rvts22"><br/></span></p>
<p><span class="rvts22">This is what's currently found in the source file for Conditional Debugging:</span></p>
<p><span class="rvts22">P &nbsp; &nbsp; &nbsp; &nbsp; -&gt; Connect</span></p>
<p><span class="rvts22">Connect &nbsp; -&gt; Compare {('||' | '&amp;&amp;') Compare}</span></p>
@ -149,7 +151,10 @@
<p><span class="rvts22">Register &nbsp;-&gt; 'A' | 'X' | 'Y' | 'R'</span></p>
<p><span class="rvts22">Flag &nbsp; &nbsp; &nbsp;-&gt; 'N' | 'C' | 'Z' | 'I' | 'B' | 'V'</span></p>
<p><span class="rvts22">PC Bank &nbsp; -&gt; 'K'</span></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com">Free HTML Help documentation generator</a></p>
<p><span class="rvts22"><br/></span></p>
<p><span class="rvts22"><br/></span></p>
<p><span class="rvts22"><br/></span></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com">Free PDF documentation generator</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>Directories</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -53,61 +53,61 @@
<div id="topic_content">
<p><span class="rvts17">Directory Overrides</span></p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p>This menu sets a default directory override for various files relating to FCEU.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts16">Base Directory</span></p>
<p>sets the default directory FCEU will use. &nbsp;It will be the folder that FCEU creates all the sub folders (unless they are also overridden).</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts16">ROMS</span></p>
<p>where FCEU will look for ROMS by default. &nbsp;(What folder will appear when selecting the Files &gt; Open...)</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts16">Battery Saves</span></p>
<p>where .sav files will stored and opened from. &nbsp;These files contain the battery backed SRAM used in some games (such as Dragon Warrior).</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts16">Save States</span></p>
<p>where .fcs (savestate) files will be stored. </p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts16">FDS BIOS ROM</span></p>
<p>where FCEU can find disksys.rom. &nbsp;disksys.rom is a required file in order to load FDS (Famicom Disk System) games. &nbsp;If not specified, FCEUX will default to the base directory.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts16">Screenshots</span></p>
<p>where screen captures (.png) files will be saved.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts16">Save Screenshots as "&lt;filebase&gt;-&lt;x&gt;.png"</span></p>
<p>sets how the .png files will be named. &nbsp;Left unchecked, the file names will simply be 0.png, 1.png etc. &nbsp;Checked adds the ROM name into the file as well (such as Double Dragon 2 (U)-0.png)</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts16">Cheats</span></p>
<p>where .cht files will be stored. &nbsp;.cht files store the active cheats set up in <a class="rvts18" href="CheatSearch.html">Cheat Search</a>.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts16">Movies</span></p>
<p>where &nbsp;.fm2 files will be saved/loaded. &nbsp;These files are the input files used in <a class="rvts18" href="MovieRecording.html">movie recording</a>.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts16">Memory Watch</span></p>
<p>where memory watch files are saved/loaded. &nbsp;These are used by <a class="rvts18" href="MemoryWatch.html">memory watch</a>.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts16">Input Presets</span></p>
<p>where input presets will be saved/loaded. &nbsp;These are used in the presets section on the <a class="rvts18" href="Input.html">input config</a> window.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts16">Lua Scripts</span></p>
<p>where Lua scripts will be saved/loaded. &nbsp;These are used when using the <span class="rvts18">Lua Scripting</span> tool.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts16">AVI Output</span></p>
<p>overrides which directory FCEUX will default to when saving a <a class="rvts18" href="AVICapturing.html">.avi file</a>.</p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour">Easily create Help documents</a></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/create-epub-ebooks">Free EPub producer</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>External Input</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -53,9 +53,9 @@
<div id="topic_content">
<p><span class="rvts17">Use External Input</span></p>
<p><br></p>
<p><br/></p>
<p>Use External Input release control of FCEU so that an external program (such as a TAS bot) can save/load states, frame advance, and deliver input. &nbsp;This feature was original implemented for older version of <span class="rvts18">Basic bot</span>. </p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/help-authoring-tool">Easy to use tool to create HTML Help files and Help web sites</a></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/create-epub-ebooks">Full featured EPub generator</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>FAQ / Guides</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -49,35 +49,35 @@
<div id="topic_content">
<p><span class="rvts17">FAQ / Guides</span></p>
<p><br></p>
<p><br/></p>
<p>Information regarding various concepts such as TAS, ROM Hacking, RAM Mapping.</p>
<p><br></p>
<p><br/></p>
<p><a class="rvts60" href="ToolAssistedSpeedruns.html">Troubleshooting FAQ</a></p>
<p><br></p>
<p><br/></p>
<p>A guide to common problems people experience, and what to do about them.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><a class="rvts60" href="ToolAssistedSpeedruns.html">Tool Assisted Speedruns (TAS)</a></p>
<p><br></p>
<p><br/></p>
<p>Information regarding Tool Assisted Speedruns and the TAS community.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><a class="rvts60" href="ROMHacking.html">ROM Hacking</a></p>
<p><br></p>
<p><br/></p>
<p>Information regarding making ROM Hacks and the ROM Hacking community.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><a class="rvts60" href="NESRAMMappingFindingValues.html">NES RAM Mapping</a></p>
<p><br></p>
<p><br/></p>
<p>A guide to the layout of NES RAM, and how to interpret its contents.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><a class="rvts26" href="DebuggerUsageIntermediate.html">Debugger Usage Guide (Intermediate)</a></p>
<p><br></p>
<p><br/></p>
<p>This is a guide that explains some of the debugging features in terms that someone</p>
<p>with previous experience with assembly can understand, and delves into the most</p>
<p>basic understanding to a degree as well. Likely won't help a beginner too much.</p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com">Free Web Help generator</a></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com">Free HTML Help documentation generator</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>FCE Ultra Version History</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -53,84 +53,84 @@
<div id="topic_content">
<p><span class="rvts17">History of FCEUX / FCE Ultra</span></p>
<p><br></p>
<p><br/></p>
<p>FCEUX was started in 2006 by zeromus and rheiny (sp) as an attempt to merge various branches of FCE Ultra into a unified emulator. &nbsp;Additional authors joined the project, including mz, adelikat, nitsujrehtona, maximus, CaH4e3, qFox, punkrockguy318, Sebastian Porst and AnS.</p>
<p><br></p>
<p><br/></p>
<p>FCEUX contains all features and enhancements from FCE, FCE Ultra, FCEU rerecording, FCEUXD, and FCEUXDSP as well as many new mappers from FCEU-mm.</p>
<p><br></p>
<p><br/></p>
<p><a class="rvts18" href="https://sourceforge.net/projects/fceultra">FCEUX sourceforge page</a></p>
<p><br></p>
<p><span class="rvts10"><br></span></p>
<p><br/></p>
<p><span class="rvts10"><br/></span></p>
<p><span class="rvts19">Version Releases</span></p>
<p><br></p>
<p><br/></p>
<p>Look at the Side Bar navigation for changelog information on FCEUX 2.1 and newer.</p>
<p><br></p>
<p><br/></p>
<p>FCEUX 2.0.3 - Released November 02, 2008 (see <a class="rvts18" href="WhatsNew203.html">changelog</a>)</p>
<p><br></p>
<p><br/></p>
<p>FCEUX 2.0.2 - Released August 14, 2008 (see <a class="rvts18" href="WhatsNew202.html">changelog</a>)</p>
<p><br></p>
<p><br/></p>
<p>FCEUX 2.0.1 - Released August 04, 2008 (see <a class="rvts18" href="WhatsNew201.html">changelog</a>)</p>
<p><br></p>
<p><br/></p>
<p>FCEUX 2.0.0 - Released August 02, 2008 (see <a class="rvts18" href="WhatsNew200.html">changelog</a>)</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts16">FCE / FCEUltra</span></p>
<p><br></p>
<p><br/></p>
<p>Bero originally wrote a Nintendo Entertainment System/Famicom emulator that was referred to as <a class="rvts18" href="http://www.geocities.co.jp/Playtown/2004/fce.htm">FCE</a>. This name was apparently meant only to serve as a temporary name, but its usage remained. Xodnizel originally ported it to Linux SVGAlib, and made a few improvements. This code base was abandoned, and work began anew, under DOS, with the original FCE source code. At the end of November, 1998, FCE Ultra Beta 1 was released.</p>
<p><br></p>
<p><br/></p>
<p>FCE Ultra remained DOS-only until version 0.18, when it was ported to Linux SVGAlib, and released as a statically-linked executable. The first MS Windows port was released as version 0.25.</p>
<p><br></p>
<p><br/></p>
<p>The source code of 0.40 was released on November 12, 2000. It retained the simple license of FCE for a long time, which stated that "This software is freeware. You can use it non-commercially." Almost two years later, in June 2002, 0.80 was released, and FCE Ultra was re-licensed under the GNU GPL. </p>
<p><br></p>
<p><br/></p>
<p>It has been tested (and runs) under DOS, Linux SVGAlib, Linux X, Mac OS X, and Windows. A native GUI is provided for the Windows port, and the other ports use a command-line interface. The SDL port should run on any modern UNIX-like operating system (such as FreeBSD, Solaris or IRIX) with no code changes. It has also been ported to the GP2X, PlayStation Portable as PSPFceUltra, the Nintendo GameCube and Pepper Pad.</p>
<p><br></p>
<p><br/></p>
<p>FCE Ultra was created by Xodnizel. Development appeared to stop and the homepage and forums for the emulator were taken down. The last version before this was v0.98.13-pre, released in September 2004 as source-only. The last binary release was v0.98.12 in August 2004.</p>
<p><br></p>
<p><br/></p>
<p>However, it was resurrected again in March of 2006 by Anthony Giorgio and Mark Doliner.</p>
<p><br></p>
<p><br/></p>
<p>There is also a graphical frontend for FCE Ultra. GFCE Ultra is written in Python and uses the GTK2 user interface library. Because is it written in Python and with portability in mind, it can be run on any UNIX-like platform and any processor architecture that is supported by Python.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts16">FCEU Rerecording</span></p>
<p><br></p>
<p><br/></p>
<p>The "rerecording" version of FCE Ultra was implemented to FCE Ultra 0.98.10 with <a class="rvts18" href="MovieRecording.html">movie recording</a> support. &nbsp;This was done by blip, and was implemented for the purpose of creating <a class="rvts18" href="ToolAssistedSpeedruns.html">Tool-Assisted Speedruns</a>.</p>
<p><br></p>
<p><br/></p>
<p>The rerecording branch continued with 0.98.12, adding movie support features, such as "bullet proof" recording. &nbsp;In 2006, FCEU 0.98.16 was implemented by nitsuja and luke. &nbsp;Various tools such as read-only toggling, increased <a class="rvts18" href="MapHotkeys.html">hotkey mapping</a>, and <a class="rvts18" href="MemoryWatch.html">memory watch</a> were added.</p>
<p><br></p>
<p><br/></p>
<p>In 2008, FCEU rerecording was picked up again by mz, maximus, adelikat, and nitsujrehtona with various updates named FCEU.0.98.17 - 0.98.28</p>
<p><br></p>
<p><br/></p>
<p><a class="rvts18" href="http://code.google.com/p/fceu/">FCEU.28 GoogleCode Page</a></p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts16">FCEUD / FCEUXD / FCEUXDSP / FCEUXDSP CE</span></p>
<p><br></p>
<p><br/></p>
<p><span class="rvts10">FCEUD</span></p>
<p>In 2002, Parasyte modified the then-current version (0.81.3) of FCE Ultra and added a Nesten-style debugger, along with several other features, and named it "FCEUD" (FCE Ultra Debugger).</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts10">FCEUXD</span></p>
<p>In January 2004, bbitmaster began working on more features and called it "FCEUXD" (FCE Ultra Extended Debugger).</p>
<p>It is a branch of FCE Ultra that contains many extended debugging features compared to the original FCE Ultra code such as a trace logger, a built-in hex editor, a name table viewer, code/data logger, inline assembler, and Game Genie decoder/encoder in addition to the debugger and PPU viewer from FCEUD. &nbsp;The last version made was FCEUXD 1.0a.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts10">FCEUXDSP</span></p>
<p><span class="rvts10">FCEUXDSP </span>stands for FCEUXD "SP" version and is a branch of FCEUXD 1.0a.</p>
<p>It was created in 2006 by sp. &nbsp;The project extends the debugging tools even further compared to FCEUXD by adding new tools, functions, and usability of debugging tools. &nbsp;</p>
<p><br></p>
<p><br/></p>
<p>The last version of FCEUXDSP was 1.07 which adds a feature known as the RAM Filter. This has since been removed, due to functional redundancy.</p>
<p><br></p>
<p><br/></p>
<p><a class="rvts18" href="http://www.the-interweb.com/serendipity/index.php?/categories/9-FCEUXD-SP">FCEUXDSP homepage</a></p>
<p><br></p>
<p><br/></p>
<p><span class="rvts10">FCEUXDSP CE</span></p>
<p>CE stands for "Champion Edition" and is a branch of XDSP that adds a text hooker tool.</p>
<p><br></p>
<p><br/></p>
<p><a class="rvts18" href="http://www.ximwix.net/boneyard/design19/xb/texthooker.htm">FCEUXDSP CE homepage</a></p>
<p><br></p>
<p><br/></p>
<p><span class="rvts16">FCEU-mm</span></p>
<p><br></p>
<p><br/></p>
<p>FCEU "mappers modified" is an unofficial build of FCEU Ultra by CaH4e3, which supports a lot of new mappers including some obscure mappers such as one for unlicensed NES ROM's.</p>
<p><br></p>
<p><br/></p>
<p>FCEUX supports mappers from older versions of FCEU-mm.</p>
<p><br></p>
<p><br/></p>
<p><a class="rvts18" href="http://sourceforge.net/projects/fceumm/">FCEU-mm SourceForge page</a></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/help-authoring-tool">Free help authoring tool</a></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour">Easily create CHM Help documents</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>Famicom Disk Sytem</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -53,39 +53,39 @@
<div id="topic_content">
<p><span class="rvts17">Famicom Disk System</span></p>
<p><br></p>
<p><br/></p>
<p>The Family Computer Disk System (FDS) was released in 1986 by Nintendo as a peripheral for the Family Computer ("Famicom") console in Japan. It was a unit that used proprietary floppy disks for data storage. It was announced, but never released, for the North American Nintendo Entertainment System.</p>
<p><br></p>
<p><br/></p>
<p>The device was connected to the Famicom deck by plugging a modified cartridge known as the RAM Adapter into the system's cartridge port, which attached via a supplied cable to the disk drive. </p>
<p><br></p>
<p><br/></p>
<p>The floppy disks used were double-sided, with a capacity of 64 kilobytes per side. Many games spanned both sides of a disk, requiring the user to switch sides at some point during gameplay. A few games used two full disks (four sides). The Famicom Disk System was capable of running on six C-cell batteries or the supplied AC adapter. The battery option was included due to the likelihood of a standard set of AC sockets already being occupied by a Famicom and a television.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts16">FDS BIOS ROM</span></p>
<p><br></p>
<p><br/></p>
<p>In order to play any Famicom (.fds) game, you will need the FDS BIOS ROM image and it must be named disksys.rom.</p>
<p>It must be in the base FCEU directory unless you specified a path to disksys.rom in the <a class="rvts18" href="Directories.html">Directory Overrides List</a>. FCEUX will not load FDS games without this file.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts16">File types</span></p>
<p><br></p>
<p><br/></p>
<p>Two types of FDS disk images are supported: disk images with the FWNES-style header, and disk images with no header. The number of sides on headerless disk images is calculated by the total file size, so don't put extraneous data at the end of the file.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts16">Writing to disk image</span></p>
<p><br></p>
<p><br/></p>
<p>If a loaded disk image is written to during emulation, FCEUX will store the modified disk image in the save games directory, which is "sav" under the base directory by default (unless changed under the <a class="rvts18" href="Directories.html">Directory Overrides List</a>).</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts16">Eject/Insert Disk</span></p>
<p><br></p>
<p><br/></p>
<p>Emulates the ejecting of the current disk or the inserting of a new disk. &nbsp;If a disk image is loaded, this command will eject it. &nbsp;If a disk is ejected, this will insert a new disk.</p>
<p>This command can be mapped to a keyboard/joypad button in the <a class="rvts18" href="MapHotkeys.html">Map Hotkeys Menu</a>.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts16">Switch Disk Side</span></p>
<p><br></p>
<p><br/></p>
<p>If/when prompted by the game, you can emulate the Switching sides of the FDS disk with the NES &gt; Switch Disk Side command.</p>
<p>This command can be mapped to a keyboard/joypad button in the <a class="rvts18" href="MapHotkeys.html">Map Hotkeys Menu</a>.</p>
<p><br></p>
<p><br/></p>
<p> </p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com">Free PDF documentation generator</a></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com">Free CHM Help documentation generator</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>GUI</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -53,32 +53,32 @@
<div id="topic_content">
<p><span class="rvts17">GUI</span></p>
<p><br></p>
<p><br/></p>
<p>Various toggle boxes related to the FCEUX main window.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts16">Load "File Open" dialog when FCEUX starts.</span></p>
<p><br></p>
<p><br/></p>
<p>If enabled, FCEUX will ask for a ROM to open upon FCEUX start up. </p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts16">Automatically hide menu on game load.</span></p>
<p><br></p>
<p><br/></p>
<p>If enabled, The FCEU Menu will be hidden while a ROM is loaded. &nbsp;To unhide it, press the ESC key.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts16">Ask confirmation on exit attempt.</span></p>
<p><br></p>
<p><br/></p>
<p>If enabled, FCEUX will ask you before closing the window. &nbsp;(It may also say some other things...)</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts16">Disable screen saver while game is loaded. </span></p>
<p><br></p>
<p><br/></p>
<p>This is enabled by default. &nbsp;If a game is running, the windows screen saver will not turn on.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts16">Enable right-click context menu.</span></p>
<p><br></p>
<p><br/></p>
<p>This is enabled by default. &nbsp;This allows you to right-click on the emulator to get context menus. &nbsp;The context menu gives many common options for a given situation and has a few options not available otherwise.</p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/help-authoring-tool">Single source CHM, PDF, DOC and HTML Help creation</a></p>
</div>

View File

@ -3,7 +3,7 @@
<head>
<title>Game Genie Encoder/Decoder</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -53,35 +53,35 @@
<div id="topic_content">
<p><span class="rvts17">Game Genie Decoder/Encoder</span></p>
<p><br></p>
<p><br/></p>
<p>This will take an NES address space PRG address ($8000-$FFFF), a comparison value (for 8-letter GG codes; refer to a Game Genie code FAQ for an explanation of what this does), and a Value that replaces the addressed byte.</p>
<p><br></p>
<p><br/></p>
<p>Filling in the Address and Value fields will produce a 6-letter code; if you also fill out the Compare field, it will produce an 8-letter code. &nbsp;The code so produced will appear in the Game Genie Code box immediately; you can then click "Add to Cheat List" to activate it.</p>
<p><br></p>
<p><br/></p>
<p>To decrypt a Game Genie code, enter it into the Game Genie Code box, and the Address and Value fields will be automatically filled in, as will the Compare field if it was an 8-letter code.</p>
<p><span class="rvts16"><br></span></p>
<p><span class="rvts16"><br/></span></p>
<p><span class="rvts16">Adding Game Genie codes</span></p>
<p><br></p>
<p><br/></p>
<p>In the Game Genie Code Decoder/Encoder window, type the code into the Game Genie Code box and click "Add to Cheat List", which will add it to the <a class="rvts18" href="CheatSearch.html">Cheat Search</a> cheat list. You can then enable/disable them by double-clicking the code in the box (a * means the code is active).</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts16">Making Game Genie codes permanent</span></p>
<p><br></p>
<p><br/></p>
<p>Using the Game Genie Code Decoder/Encoder, enter in your code in the "Game Genie Code" box, and under "Possible Affected ROM File Addresses", a list of possible matches (usually from 1 to 5) is displayed. Using the built-in Hex Editor, go to the first listed address in the ROM, and change its value to the value given in the "Value" box (of the GG code Decoder/Encoder window). If the desired effect isn't achieved, undo the change (Ctrl+Z) and try the next address. Repeat until the desired effect is achieved, and then save the ROM.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts16">How do I make my own Game Genie codes?</span></p>
<p><br></p>
<p><br/></p>
<p>First of all, you must:</p>
<p><br></p>
<p><br/></p>
<p>* have a decent amount of ASM knowledge;</p>
<p>* know how to use the debugger;</p>
<p>* understand NES PRG-ROM bank switching.</p>
<p><br></p>
<p><br/></p>
<p>Once you've found a part of PRG-ROM you want to change to create a code effect, snap the <a class="rvts18" href="Debugger.html">Debugger</a> (if it's not so already) and find the code's location in the PRG-ROM's address space ($8000-$FFFF) (you'll want the debugger snapped so the game won't swap banks out from under you). Then, using the built-in <a class="rvts18" href="HexEditor.html">Hex Editor</a>, view the NES memory and go to the PRG-ROM address you wish to modify, then right-click the byte and choose "Create Game Genie Code at this Address". The Game Genie Code Decoder/Encoder will appear, with the Address and Compare boxes filled in (the Compare box represents the address's original value). Enter the new value into the "Value" box. </p>
<p><br></p>
<p><br/></p>
<p>An alternative way to enter the code is to locate the desired address in the debugger, and then middle-click on it, which will summon the GG Code Decoder/Encoder. Then enter the code as described above</p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour/iphone-website-generation">Easily create iPhone documentation</a></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com">Free EPub and documentation generator</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>Game file compatibility</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -53,33 +53,33 @@
<div id="topic_content">
<p><span class="rvts17">File Formats/Expansion Hardware</span></p>
<p><br></p>
<p><br/></p>
<p><span class="rvts16">Valid Game Types</span></p>
<p><br></p>
<p><br/></p>
<p>FCEUX supports the iNES, FDS(raw and with a header), UNIF, and NSF file formats. FDS ROM images in the iNES format are not supported; it would be silly to do so and storing them in that format is nonsensical.</p>
<p><br></p>
<p><br/></p>
<p>FCEUX supports loading ROM/disk images from some types of compressed files. FCEUX can load data from both PKZIP-format files and gzip-format files. Only the "deflate" algorithm is supported, but this is the most widely used algorithm for these formats.</p>
<p><span class="rvts16"><br></span></p>
<p><span class="rvts16"><br/></span></p>
<p><span class="rvts16">Playing from compressed (.zip) files</span></p>
<p><br></p>
<p><br/></p>
<p>FCEUX is compatible with all compression types compatible with 7z. &nbsp;Compatible types include .7z, .zip, .rar, and .tar.</p>
<p><br></p>
<p><br/></p>
<p>If an archive file is opened, it will be scanned for the followings extensions: .nes, .fds, .nsf, .unf, .nez, .unif. &nbsp;If more than one valid type is detected, a dialog box will open up with a list of available choices.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts16">Automatic IPS Patching (Playing Hacked Games)</span></p>
<p><br></p>
<p><br/></p>
<p>FCEUX supports automatic IPS patching. &nbsp;</p>
<p><br></p>
<p><br/></p>
<p>Place the IPS file in the same directory as the file to load, and name it [filename.extension].ips.</p>
<p><br></p>
<p><br/></p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;Examples: &nbsp; &nbsp; &nbsp; &nbsp;Boat.nes - &nbsp; &nbsp; &nbsp;Boat.nes.ips</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Boat.zip - &nbsp; &nbsp; &nbsp; Boat.zip.ips</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Boat.nes.gz - &nbsp;Boat.nes.gz.ips</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Boat &nbsp; &nbsp; - &nbsp; &nbsp; &nbsp; &nbsp; Boat.ips</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;</p>
<p><br></p>
<p><br/></p>
<p>(Some operating systems and environments will hide file extensions. Keep this in mind if you are having trouble.)</p>
<p><br></p>
<p><br/></p>
<p>Patching is supported for all supported formats (iNES, FDS, UNIF, and NSF), but it will probably only be useful for the iNES and FDS formats. UNIF files can't be patched well with the IPS format because they are chunk-based with no fixed offsets. </p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour">Easily create Help documents</a></p>
</div>

View File

@ -3,7 +3,7 @@
<head>
<title>General</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -49,33 +49,33 @@
<div id="topic_content">
<p><span class="rvts17">General</span></p>
<p><br></p>
<p><br/></p>
<p>Guides for general uses of FCEUX.</p>
<p><br></p>
<p><br/></p>
<p><a class="rvts27" href="Gettingstarted.html">Getting Started</a></p>
<p><br></p>
<p><br/></p>
<p>A guide for loading games, setting up controls, etc.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><a class="rvts26" href="CommandLineOptions.html">Command Line Options</a></p>
<p><br></p>
<p><br/></p>
<p>FCEUX as an extensive set of options for running from command line (or .bat file). &nbsp;This guide explains all command options available.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><a class="rvts27" href="FamicomDiskSytem.html">Famicom Disk System</a></p>
<p><br></p>
<p><br/></p>
<p>A guide for playing Famicom (.fds) games.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><a class="rvts27" href="MovieRecording.html">Movie Recording</a></p>
<p><br></p>
<p><br/></p>
<p>A guide for playing and recording movie input files (.fm2).</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><a class="rvts27" href="AVICapturing.html">AVI Capturing</a></p>
<p><br></p>
<p><br/></p>
<p>A guide for capturing a game/movie file into an AVI file.</p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour/iphone-website-generation">Free iPhone documentation generator</a></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com">Full featured Documentation generator</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>Getting Started</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -53,15 +53,15 @@
<div id="topic_content">
<p><span class="rvts17">Getting Started</span></p>
<p><br></p>
<p><br/></p>
<p><span class="rvts28">Playing Games</span></p>
<p><br></p>
<p><br/></p>
<p>The most basic function of FCEUX is to play Nintendo Entertainment System (NES) and Famicom Disk System (FDS) games.</p>
<p><br></p>
<p><br/></p>
<p>To play a game, simply open a ROM by selecting "Open" in the File Menu (or press Ctrl+O). &nbsp;(See <a class="rvts18" href="Gamefilecompatibility.html">Game Compatibility</a> for information regarding file types that are compatible with FCEU.)</p>
<p><br></p>
<p><br/></p>
<p>To get set up properly, you may need to configure any of the following:</p>
<p><br></p>
<p><br/></p>
<p>-<a class="rvts18" href="Input.html">Input</a></p>
<p>-<a class="rvts18" href="Video.html">Video</a></p>
<p>-<a class="rvts18" href="SoundOptions.html">Sound</a></p>
@ -69,29 +69,29 @@
<p>-<a class="rvts18" href="GUI.html">GUI settings</a></p>
<p>-<a class="rvts18" href="MapHotkeys.html">Hotkeys</a></p>
<p>-<a class="rvts18" href="Directories.html">Directory Overrides</a></p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts16">Using Savestates</span></p>
<p><br></p>
<p><br/></p>
<p>In emulation, a savestate (alternatively called freeze state or game freeze) is a snapshot of all of an emulated device's state information at a given moment. This makes it possible to pause emulation, and restart it later, even in another instance of the emulator, or to test the emulated machines reaction to different series of inputs using the saved state as a common starting point. </p>
<p><br></p>
<p><br/></p>
<p>To make a savestate press shift + F1-F10 to save to a save slot (0-9). &nbsp;Or select a save slot with the number keys (0-9) and select the quick save command (Default hotkey is "I")</p>
<p><br></p>
<p><br/></p>
<p>To load a savestate press F1-F10. &nbsp;Or select a save slot with the number keys (0-9) and loadstate by navigating to File &gt; Savestate &gt; &nbsp;Loadstate or by pressing the loadstate hotkey (Default hotkey is "P").</p>
<p><br></p>
<p><br/></p>
<p>To save a state to a specific file, go to "Save state as..." in the FCEUX File menu.</p>
<p><br></p>
<p><br/></p>
<p>To load a specific savestate file, go to the "Load state from..." in the FCEUX File menu.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts16">Undo Savestate / Loadstate</span></p>
<p><br></p>
<p><br/></p>
<p>If you load a state by accident, you can right-click and select "Undo Loadstate" to restore the emulator back to the state it was in before the loadstate. &nbsp;Upon using undo loadstate, a redo loadstate will appear as an option. &nbsp;</p>
<p><br></p>
<p><br/></p>
<p>If you make a savestate, it will overwrite the existing savestate for that slot. &nbsp;You have the option to undo this and restore the previous savestate file by right-clicking and selecting undo savestate. &nbsp;Once you undo, you will have the option to redo savestate to restore the savestate that you made. &nbsp;You can also map a <a class="rvts18" href="MapHotkeys.html">hotkey</a> to this function, by default it's mapped to Ctrl+Z.</p>
<p><br></p>
<p><br></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/help-authoring-tool">Free help authoring tool</a></p>
<p><br/></p>
<p><br/></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour/iphone-website-generation">Create iPhone web-based documentation</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>Hex Editor</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -53,39 +53,39 @@
<div id="topic_content">
<p><span class="rvts17">Hex Editor</span></p>
<p><br></p>
<p><br/></p>
<p><span class="rvts16">Introduction</span></p>
<p><br></p>
<p><br/></p>
<p>The Hex editor is a very powerful memory viewing/editing tool and obsoletes the Memory Viewer tool from the FCE Ultra and FCEU Rerecording branches.</p>
<p><br></p>
<p><br/></p>
<p>It can do a wide range of things. &nbsp;It allows you to view the entire RAM &amp; ROM contents in an expandable dialog Window. &nbsp;It makes it easy to edit the game's RAM, PPU memory, and even its currently-loaded ROM data by simply typing in values in the editor. You can also "freeze" parts of RAM (to prevent the game from modifying the data there), search for data, and even copy and paste data to/from the clipboard. &nbsp;Furthermore, table files are supported, so you can edit a game's text in real-time and see the result immediately.</p>
<p><br></p>
<p><br/></p>
<p>Basically, it lets you tinker with any part of a game's RAM or ROM while it is running.</p>
<p><br></p>
<p><span class="rvts16"><br></span></p>
<p><br/></p>
<p><span class="rvts16"><br/></span></p>
<p><span class="rvts16">Using the Hex Editor</span></p>
<p><br></p>
<p><br/></p>
<p>The Hex Editor lets you edit three major areas:</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts38">1. NES MEMORY</span></p>
<p>This allows you to directly edit all of the NES address space ($0000-$FFFF). While you can easily modify RAM, or write directly to registers by typing in data, you cannot modify ROM data ($8000-$FFFF) itself. &nbsp;This is because most mappers have registers which are located in this space; so writing there can trigger mapper operations that may cause the game to crash or glitch if you don't know what you're doing. &nbsp;If you want to edit the ROM itself, right-click on the offset and select &nbsp;"Go here in ROM file"; that will take you directly to where you need to be so you can start editing. &nbsp;You can also freeze RAM by clicking on it with the middle mouse button, or by using the right-click menu. This works by adding it directly to the Cheat List, which you can see from the Cheat Console. &nbsp;Finally, the right-click menu can be used to quickly add a read or write breakpoint to the debugger.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts38">2. PPU MEMORY</span></p>
<p>This allows you to directly view and write to PPU memory (VRAM).</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts38">3. THE ROM FILE</span></p>
<p>This is possibly the coolest part of FCEUXD: &nbsp;It allows you to edit the ROM file in real-time, i.e. while the game is running. If you make a mistake, press Ctrl+Z or Edit-&gt;Undo to undo your change (then load a save-state if the game crashed). &nbsp;If you have the Code/Data Logger running, then bytes that were logged as code will be colored yellow, while bytes logged as data will be colored blue. Bytes that have been logged as code *and* data will be colored green.</p>
<p><br></p>
<p><br/></p>
<p>The Hex Editor also has support for table files (*.tbl) to map bytes to text. Each line consists of four characters of the form "xx=y", where "xx" is the hex value, and "y" is the character that that value represents. &nbsp;I have also added an extension to represent the Return key: &nbsp;xx=ret whereby pressing the Return key will enter that value into the ROM. &nbsp;You can copy/paste data or text by selecting it and using Ctrl+Z (to copy) and Ctrl+V (to paste). Plus, there is an Edit-&gt;Find feature that you can use to search for data. This feature should be fairly intuitive, so I won't bother to explain it.</p>
<p><br></p>
<p><br/></p>
<p>When you're done editing, remember to save the ROM file (File-&gt;Save) or your changes will be lost when you close the ROM.</p>
<p><span class="rvts10"><br></span></p>
<p><span class="rvts10"><br/></span></p>
<p><span class="rvts16">Why can't I edit NES memory beyond $8000?</span></p>
<p><span class="rvts10"><br></span></p>
<p><span class="rvts10"><br/></span></p>
<p>NES memory from $8000-$FFFF is where the game's PRG-ROM code is mapped. &nbsp;Whenever you type in a value in the NES memory editor, it effectively writes that value to that address. Many games use mappers, which are usually accessed by writing to $8000-$FFFF (which is read-only)... and if *you* were to do so, it may trigger a bankswitch, which could easily make the game crash. In any event, doing so will not modify the ROM itself. &nbsp;What you *can* do, though, is edit the PRG-ROM itself by right-clicking on the offset you wish to edit, and selecting "Go here in the ROM file", which should take you to that spot in the ROM instead, where you can change the data at instead.</p>
<p><br></p>
<p><br/></p>
<p>.</p>
<p><br></p>
<p><br/></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour">Easily create Help documents</a></p>
</div>

View File

@ -3,7 +3,7 @@
<head>
<title>Input</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -53,57 +53,57 @@
<div id="topic_content">
<p><span class="rvts17">Input Configuration</span></p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts28">Setting up controllers</span></p>
<p><br></p>
<p><br/></p>
<p>On the pull down menus, you can select the device you want to be emulated on input ports 1 and 2 (game pad, zapper, pad, paddle). If you check the box labeled "Attach four-score(implies four gamepads)", you won't be able to select any of these options, because the four-score allowed someone to use 2 extra controllers.</p>
<p>The device currently being emulated on each port is listed above the drop down list; loading certain games will override your settings, but only temporarily.</p>
<p><br></p>
<p><br/></p>
<p>To bind these controls to specific keys/joystick controls use the &nbsp;"configure" the device listed above each drop-down list.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts16">Zapper / Arkanoid Paddle</span></p>
<p><br></p>
<p><br/></p>
<p>Most Zapper NES games expect the Zapper to be plugged into port 2. and most VS Unisystem games expect the Zapper to be plugged into port 1.</p>
<p><br></p>
<p><br/></p>
<p>The left mouse button is the emulated trigger button for the Zapper. The right mouse button is also emulated as the trigger, but as long as you have the right mouse button held down, no color detection will take place, which is effectively like pulling the trigger while the Zapper is pointed away from the television screen. Note that you must hold the right button down for a short time to have the desired effect. </p>
<p><br></p>
<p><br/></p>
<p>The Arkanoid Paddle emulates the same way the zapper.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts16">Power Pad A / B</span></p>
<p><br></p>
<p><br/></p>
<p>Emulates the NES Power pad. &nbsp;The 12 pad buttons can be routed via the configure button. &nbsp;FCEUX allows up to 2 Power Pads to be emulated at once (Power Pad A and B).</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts16">Famicom Controllers</span></p>
<p><br></p>
<p><br/></p>
<p>You can also select the input device to be emulated on the Famicom Expansion port. &nbsp;If you select a device for the Famicom Expansion Port, you should probably have emulated game pads on the emulated NES-style input ports. </p>
<p><br></p>
<p><br/></p>
<p>In addition to the traditional famicom controller, FCEUX can emulate the Famicom version of the Arkanoid controller, the "Space Shadow" gun, the Famicom 4-player adapter, the Family Keyboard, the HyperShot controller, the Mahjong controller, the Oeka Kids tablet, the Quiz King buzzers, the Family Trainer, and the Barcode World barcode reader.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts16">Replace Port 2 Start With Microphone</span></p>
<p><br></p>
<p><br/></p>
<p>Checking this box will replace the Start button used by controller 2 with the microphone option found on the famicom. Pressing the Microphone button is like blowing or yelling into it on the console equipment. The Port 2 controller used for the Famicom included a microphone and a volume control in place of the Start and Select buttons. This option isn't automatically detected, so it has to be manually enabled by the user. Movie files may also enable and use this feature. Both Famicom Cartridges and Famicom Disks have made use of this feature, such as both the cartridge and disk version of Zelda 1, Hikari Shinwa, and Takeshi no Chosenjo. Games other than those listed here use this feature.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts28">Input Presets</span></p>
<p><span class="rvts28"><br></span></p>
<p><span class="rvts28"><br/></span></p>
<p>This feature allow you to set the current input configuration to one of three presets. &nbsp;This gives you the option to quickly change from one input configuration to another (such as toggling between 1 or 2 controllers and/or toggling from controller 2 being bound to controller 1 or having its own controls).</p>
<p><br></p>
<p><br/></p>
<p>To assign the current input configuration to a preset press the down arrow next to one of the presets. &nbsp;To assign the preset as the current input configuration press the up arrow or use the hotkey assigned to that specific preset. &nbsp;Preset hotkeys can be assigned in the <a class="rvts18" href="MapHotkeys.html">Map Hotkeys</a> menu.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts28">Disable left+right/up+down</span></p>
<p><br></p>
<p><br/></p>
<p>By default FCEUX allows you to press both the left and right controls at the same time (or up and down). &nbsp;To disable this feature uncheck the checkbox on the left. </p>
<p><br></p>
<p><br/></p>
<p><span class="rvts28">Auto-Hold</span></p>
<p><br></p>
<p><br/></p>
<p>Clicking the auto hold button will allow you to assign a hotkey to the auto-hold feature. &nbsp;</p>
<p>Clicking the clear button will allow you to assign a hotkey to the clear auto-holds feature.</p>
<p><br></p>
<p><br/></p>
<p>To use this feature, close the input config window and return to the FCEUX main window. &nbsp;Hold down the auto-hold hotkey and press one of your controller inputs. &nbsp;This will add it as one of the auto-hold assignments. &nbsp;The game will keep auto-hold assigned buttons held be default. &nbsp;Pressing one of these keys will release the button for the duration that it is held.</p>
<p><br></p>
<p><br/></p>
<p>To turn off all auto-hold assignments press the clear auto-holds hotkey.</p>
<p><span class="rvts10"><br></span></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com">Free CHM Help documentation generator</a></p>
<p><span class="rvts10"><br/></span></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/create-epub-ebooks">Generate EPub eBooks with ease</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>Introduction</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -47,17 +47,17 @@
<div id="topic_content">
<p><span class="rvts12">Introduction</span></p>
<p><br></p>
<p><br/></p>
<p>Basic information about FCEUX and its features.</p>
<p><span class="rvts11"><br></span></p>
<p><span class="rvts11"><br/></span></p>
<p><a class="rvts11" href="Introduction.html">Introduction</a></p>
<p><span class="rvts10"><br></span></p>
<p><span class="rvts10"><br/></span></p>
<p><a class="rvts11" href="Overview.html">Overview</a></p>
<p><span class="rvts10"><br></span></p>
<p><span class="rvts10"><br/></span></p>
<p><a class="rvts11" href="FCEUltraVersionHistory.html">FCE Ultra Version History</a></p>
<p><span class="rvts11"><br></span></p>
<p><span class="rvts11"><br/></span></p>
<p><a class="rvts11" href="WhatsNew200.html">What's Combined In FCEUX?</a></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com">Free HTML Help documentation generator</a></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/create-epub-ebooks">Write EPub books for the iPad</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>Introduction</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -53,62 +53,62 @@
<div id="topic_content">
<p><span class="rvts16">Welcome to the FCEUX Help menu.</span></p>
<p><br></p>
<p><br/></p>
<p>The following information is about how to use FCEUX, its commands, how to use FCEUX to its fullest, and the communities for which FCEUX is designed.</p>
<p><span class="rvts15"><br></span></p>
<p><br></p>
<p><span class="rvts15"><br/></span></p>
<p><br/></p>
<p><span class="rvts12">Introduction</span></p>
<p><br></p>
<p><br/></p>
<p>Basic information about FCEUX and its features.</p>
<p><span class="rvts11"><br></span></p>
<p><span class="rvts11"><br/></span></p>
<p><a class="rvts11" href="Overview.html">Overview</a></p>
<p><span class="rvts10"><br></span></p>
<p><span class="rvts10"><br/></span></p>
<p><a class="rvts11" href="FCEUltraVersionHistory.html">FCE Ultra Version History</a></p>
<p><span class="rvts11"><br></span></p>
<p><span class="rvts11"><br/></span></p>
<p><a class="rvts11" href="WhatsNew200.html">What's Combined In FCEUX?</a></p>
<p><span class="rvts10"><br></span></p>
<p><br></p>
<p><span class="rvts10"><br/></span></p>
<p><br/></p>
<p><span class="rvts12">Additional Chapters</span></p>
<p><br></p>
<p><br/></p>
<p><a class="rvts11" href="General.html">General</a></p>
<p><br></p>
<p><br/></p>
<p>Guides for general uses of FCEUX and the FCEUX NES menu.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><a class="rvts11" href="Config.html">Config</a></p>
<p><br></p>
<p><br/></p>
<p>Commands under FCEUX Config menu.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><a class="rvts11" href="Tools2.html">Tools</a></p>
<p><br></p>
<p><br/></p>
<p>Commands under FCEUX Tools menu.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><a class="rvts11" href="Debug.html">Debug</a></p>
<p><br></p>
<p><br/></p>
<p>Commands under FCEUX Debug menu.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><a class="rvts11" href="FAQGuides.html">FAQ / Guides</a></p>
<p><br></p>
<p><br/></p>
<p>Information regarding various concepts such as TAS, ROM Hacking, RAM Mapping.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><a class="rvts11" href="Technicalinformation.html">Technical Information</a></p>
<p><br></p>
<p><br/></p>
<p>Technical information relating to NES hardware emulation &amp; FCEUX file formats.</p>
<p><br></p>
<p><br></p>
<p><br></p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><br/></p>
<p><br/></p>
<p><br/></p>
<p>Help menu created by adelikat.</p>
<p>Updated &amp; recompiled by AnS.</p>
<p>Information collected and/or written/edited by adelikat.</p>
<p>Minor edits of lua-related text by Leeland Kirwan (FatRatKnight).</p>
<p><br></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com">Full featured Documentation generator</a></p>
<p><br/></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/help-authoring-tool">Free help authoring environment</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>Lua Bot</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -53,154 +53,154 @@
<div id="topic_content">
<p><span class="rvts17">LuaBot</span></p>
<p><br></p>
<p><br/></p>
<p>LuaBot employs a new concept in FCEUX Tool creation. &nbsp;It is an external lua script that creates the Basic bot GUI. &nbsp;The GUI then uses lua scripting to perform botting tasks.</p>
<p><br></p>
<p><br/></p>
<p>To run it you must have lua scripting enabled (see <a class="rvts18" href="LuaGettingStarted.html">Getting Started</a>). &nbsp;LuaBot is included in the lua pack under /luaScripts. &nbsp;to get started run &nbsp;luabot_framework.lua.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts12">What is Lua Bot?</span></p>
<p>LuaBot is...well, a bot. It uses a combination of probability, scripting and RAM monitoring to play games. &nbsp;Specifically &nbsp;basic bot is used to create portions of <a class="rvts18" href="ToolAssistedSpeedruns.html">Tool Assisted Speedrun</a>. &nbsp; It is most powerful for finding solutions in highly random situations, or highly improbably events (such as manipulating a critical hit in an RPG). &nbsp;Basic bot comes with a rather powerful scripting language in order to be "programmed" to handle these specific situations. &nbsp;LuaBot in its most extreme application can even be "taught" to play video games!</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts12">How to Use Lua Bot</span></p>
<p><br></p>
<p><br/></p>
<p>LuaBot is a trial and error script that exhausts the input-search-space by simply trying to push buttons. </p>
<p><br></p>
<p><br/></p>
<p>You can program it to limit this searchspace, as it can become exponentially large. You can press eight possible buttons at any frame, each on or off. That's 2 raised to the 8, or 256 possible combinations in that one frame. There are 60 frames in one second, so you have 256 raised to the power of 60. Write a three. Now start writing 144 zeroes after it. It's not a small number.</p>
<p><br></p>
<p><br/></p>
<p>Anyways, the bot has two parts. The frontend, which we'll call BeeBee, and the Lua part, which we call LuaBot.</p>
<p><br></p>
<p><br/></p>
<p>You start the bot by opening the LuaBot_front.lua script file. Make sure the LuaBot_backend.lua file is in the same directory.</p>
<p><br></p>
<p><br/></p>
<p>BeeBee</p>
<p><br></p>
<p><br/></p>
<p>BeeBee (who received it's name from BasicBot, its predecessor) just writes it's contents into the LuaBot framework and produces a big Lua script for you.</p>
<p>All you need to do is enter Lua code for the specific functions and the code will generate the script.</p>
<p><br></p>
<p><br/></p>
<p>You can also save and load the contents of the front-end. That way you can easily manage your bot scripts, without actually having to look into the LuaBot code.</p>
<p><br></p>
<p><br/></p>
<p>BeeBee is only a pasting mechanism. It does not compile Lua or warn for errors.</p>
<p><br></p>
<p><br/></p>
<p>LuaBot</p>
<p><br></p>
<p><br/></p>
<p>LuaBot is a generic trial-and-error script that serves as a bot framework. It will set inputs as you program them for a number of frames (called an attempt). When the isAttemptEnd() says the attempt ends, a new attempt is started. All the attempts fall under one segment. At the end of a segment (denoted by the isSegmentEnd() function), the best attempt is kept (judged by the score and tie functions) and the next segment is started. The bot is capable of rolling back if a segment runs into a dead end. This allows you to backtrack and restart a previous segment.</p>
<p><br></p>
<p><br/></p>
<p>The bot evaluates a true or false by checking to see whether the return value of a function is bigger then a certain value. It does this for EVERY function that returns something and every function that returns something must return a number (or Lua _will_ complain). For absolute true or false you can return "yes" and "no", "maxvalue" and "minvalue" or "pressed" and "released". Read variable info for more information.</p>
<p><br></p>
<p><br/></p>
<p>The script takes a number of variables and functions into account. Some variables become important to prevent desyncing over segments.</p>
<p><br></p>
<p><br/></p>
<p>- maxvalue</p>
<p>The maximum value (exclusive) of the random evaluation. If a value is higher than rand(minvalue, maxvalue), it evaluates as true, else false. By default this is set to 100.</p>
<p><br></p>
<p><br/></p>
<p>- minvalue</p>
<p>The lowest value (inclusive) of the random evaluation. If a value is lower than rand(minvalue, maxvalue), it evaluates to false, else true. By default this is set to 0.</p>
<p><br></p>
<p><br/></p>
<p>- yes / no</p>
<p>- pressed / released</p>
<p>These map to the minvalue/maxvalue.</p>
<p><br></p>
<p><br/></p>
<p>- loopcounter</p>
<p>The number of times a frameadvance has been called by the main botloop.</p>
<p><br></p>
<p><br/></p>
<p>- key1 key2 key3 key4</p>
<p>The input table of players 1-4. The keys are: A B up down left right select start. Set any to 1 if you want them to be set and to nil if you don't want them set.</p>
<p>Note that these get cleared right before onInputStart is called. This variable is saved in a pseudo-movie table if the attempt is better then the previous one and used for playback when moving to the next segment.</p>
<p><br></p>
<p><br/></p>
<p>- lastkey1 lastkey2 lastkey3 lastkey4</p>
<p>The inputs that were given to FCEU on the PREVIOUS frame. This holds for segments as well (at the beginning of a new segment, the lastkeys of the previous segment are set). This also goes for the start. If you use key1-4 in onStart, the first segment will have those keys as lastkey.</p>
<p><br></p>
<p><br/></p>
<p>- frame</p>
<p>The number of frames of the current attempt. Starts at 1.</p>
<p><br></p>
<p><br/></p>
<p>- attempt</p>
<p>The number of attempts in the current segment. Starts at 1.</p>
<p><br></p>
<p><br/></p>
<p>- segment</p>
<p>The segment the bot is currently running. Note that rolledback segments are deducted from this number.</p>
<p><br></p>
<p><br/></p>
<p>- okattempts</p>
<p>The number of attempts that have been deemed ok. This is a statistical variable. It might tell you how well your bot is doing (combined with the number of failed attempts).</p>
<p><br></p>
<p><br/></p>
<p>- failattempts</p>
<p>The number of attempts in the current segment that have been deemed bad. This is a statistical variable. It might tell you how well your bot is doing (combined with the number of approved attempts).</p>
<p><br></p>
<p><br/></p>
<p>- segments</p>
<p>This is the big table that holds everything together. Don't mess with it.</p>
<p><br></p>
<p><br/></p>
<p>- maxframes</p>
<p>You can set maxframes and check it in the isAttemptEnd function to simply limit a attempt by this many frames. You can also just ignore this and do something else instead.</p>
<p><br></p>
<p><br/></p>
<p>- maxattempts</p>
<p>Same as maxframes, except for attempts in a segment.</p>
<p><br></p>
<p><br/></p>
<p>- maxsegments</p>
<p>Same as maxframes, except for segments in a run.</p>
<p><br></p>
<p><br/></p>
<p>- playingbest</p>
<p>Will be set to true when the bot is playing back it's best attempt to advance to the next segment. Not really used by other functions.</p>
<p><br></p>
<p><br/></p>
<p>- keyrecording1-4</p>
<p>A simple table with the pressed keys for playback.</p>
<p><br></p>
<p><br/></p>
<p>- X Y Z P Q</p>
<p>Some "static" variables. These allow you to easily set them onStart and use them in various functions to return the same number. Like a global variable. The P and Q numbers used to denote a random number between 0 and P or Q, but they don't right now.</p>
<p><br></p>
<p><br/></p>
<p>- vars</p>
<p>This is your variable table. It's contents is saved at the end of an attempt and will be loaded at the beginning of a segment. On rollback, this table is also kept. Put any variable you want to keep across segments in this table.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p>Ok. That's it for the variables. Now for functions. There are basically three types of functions. The functions that determine whether a button is pressed (8 for each player), to determine whether an attempt/segment/run has ended or was ok and functions for certain events. This number is not evaluated by the random-eval function.</p>
<p><br></p>
<p><br/></p>
<p>- getScore</p>
<p>This returns how "well" the current attempt is. At the end of a segment, the best scoring good attempt will be used to continue to the next segment. In case of a tie, see the tie functions. This number is not evaluated by the random-eval function!</p>
<p><br></p>
<p><br/></p>
<p>- getTie1-4</p>
<p>If the score ends in a tie, that is, two attempts score equally well (have an equal number of points for instance), you can use these functions to break that tie. Like, which attempt has the most health or is the fastest or whatever. This number is not evaluated by the random-eval function!</p>
<p><br></p>
<p><br/></p>
<p>- isRunEnd</p>
<p>Return whether the bot should stop running. If the returned number is bigger then the random number rand(minvalue-maxvalue), the bot will stop.</p>
<p><br></p>
<p><br/></p>
<p>- mustRollBack</p>
<p>Returns whether the bot should rollback the current attempt. In such case, the previous segment is loaded and the current segment is completely discarded. If the returned number is bigger then the random number rand(minvalue-maxvalue), the segment will rollback one segment.</p>
<p><br></p>
<p><br/></p>
<p>- isSegmentEnd</p>
<p>If the returned number is bigger then the random number rand(minvalue-maxvalue), the bot will stop the current segment, play back the best recorded attempt and start a new segment. Mostly done when a certain number of attempts is reached, but possibly you know when have the best possible attempt and can move on.</p>
<p><br></p>
<p><br/></p>
<p>- isAttemptEnd</p>
<p>If the returned number is bigger then the random number rand(minvalue-maxvalue), the attempt will stop and a new attempt will be started. Some examples when this function should return yes is when you reached a certain goal, a number of frames or when you died (in which case the bot should try again :).</p>
<p><br></p>
<p><br/></p>
<p>- isAttemptOk</p>
<p>If the returned number is bigger then the random number rand(minvalue-maxvalue), the current attempt (which has just ended) is deemed ok. Only attempts that are deemed ok are up for being saved. For instance, when the player died in the current attempt, you should return no.</p>
<p><br></p>
<p><br/></p>
<p>- pressKeyX (pressKeyA1, pressKeyStart4, etc...)</p>
<p>These functions determine whether a button should be pressed in the next frame. If the returned number is bigger then the random number rand(minvalue-maxvalue), the button is pressed, otherwise it is not. To absolutely press a button, simply return yes or no. To use some odds, return a number between minvalue and maxvalue. For instance, using the default settings, if you return 50, there is a 50% chance the button will be pressed.</p>
<p><br></p>
<p><br/></p>
<p>- onStart</p>
<p>Maybe a little misleading, but the onStart function is called BEFORE the main botloop starts. You can do some non-generic startup stuff here like press start at the title screen and get the game started. Returns nothing.</p>
<p><br></p>
<p><br/></p>
<p>- onFinish</p>
<p>The opposite to onStart, this function is called when the main botloop exits. You can cleanup, or write stuff or whatever.</p>
<p><br></p>
<p><br/></p>
<p>- onSegmentStart</p>
<p>When a new segment is started, this is called. After initializing variables and such, but before onAttemptStart is called. Returns nothing.</p>
<p><br></p>
<p><br/></p>
<p>- onSegmentEnd</p>
<p>When isSegmentEnd evaluates to true, this function is called. Returns nothing.</p>
<p><br></p>
<p><br/></p>
<p>- onAttemptStart</p>
<p>Called at the start of a new attempt, after onSegmentStart (in case of a new segment) but before onInputStart. Returns nothing.</p>
<p><br></p>
<p><br/></p>
<p>- onAttemptEnd(wasOk)</p>
<p>Called at the end of an attempt. The only function to have a parameter (note: case sensitive). The parameter wasOk will return (boolean) whether isAttemptOk evaluated to true or false. Returns nothing.</p>
<p><br></p>
<p><br/></p>
<p>- onInputStart</p>
<p>In a frame, this is the first place where the key1-4 variables are cleared. This is called before all the input (pressKeyX) functions are called. Returns nothing.</p>
<p><br></p>
<p><br/></p>
<p>- onInputEnd</p>
<p>This is called immediately after the input (pressKeyX) functions have been called. Returns nothing.</p>
<p><br></p>
<p><br></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour">Full featured Help generator</a></p>
<p><br/></p>
<p><br/></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour">Easily create Help documents</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>Lua Functions List</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -53,549 +53,549 @@
<div id="topic_content">
<p><span class="rvts17">Lua Functions</span></p>
<p><br></p>
<p><br/></p>
<p>The following functions are available in FCEUX, in addition to standard LUA capabilities:</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts49">Emu library</span></p>
<p><br></p>
<p><br/></p>
<p><span class="rvts58">emu.poweron()</span></p>
<p><span class="rvts57"><br></span></p>
<p><span class="rvts57"><br/></span></p>
<p><span class="rvts57">Executes a power cycle.</span></p>
<p><span class="rvts57"><br></span></p>
<p><span class="rvts57"><br/></span></p>
<p><span class="rvts58">emu.softreset()</span></p>
<p><span class="rvts57"><br></span></p>
<p><span class="rvts57"><br/></span></p>
<p><span class="rvts57">Executes a (soft) reset.</span></p>
<p><br></p>
<p><br/></p>
<p><span class="rvts50">emu.speedmode(string mode)</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Set the emulator to given speed. The mode argument can be one of these:</span></p>
<p><span class="rvts37"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts37">- "normal"</span></p>
<p><span class="rvts37"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts37">- "nothrottle" (same as turbo on fceux)</span></p>
<p><span class="rvts37"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts37">- "turbo"</span></p>
<p><span class="rvts37"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts37">- "maximum"</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts50">emu.frameadvance()</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Advance the emulator by one frame. It's like pressing the frame advance button once.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Most scripts use this function in their main game loop to advance frames. Note that you can also register functions by various methods that run "dead", returning control to the emulator and letting the emulator advance the frame. &nbsp;For most people, using frame advance in an endless while loop is easier to comprehend so I suggest &nbsp;starting with that. &nbsp;This makes more sense when creating bots. Once you move to creating auxillary libraries, try the register() methods.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts50">emu.pause()</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Pauses the emulator.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts50">emu.unpause()</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Unpauses the emulator.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts50">emu.exec_count(int count, function func)</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Calls given function, restricting its working time to given number of lua cycles. Using this method you can ensure that some heavy operation (like Lua bot) won't freeze FCEUX.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts51">emu.exec_time(int time</span><span class="rvts50">, function func</span><span class="rvts51">)</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Windows-only. Calls given function, restricting its working time to given number of milliseconds (approximate). Using this method you can ensure that some heavy operation (like Lua bot) won't freeze FCEUX.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts50">emu.setrenderplanes(bool sprites, bool background)</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Toggles the drawing of the sprites and background planes. Set to false or nil to disable a pane, anything else will draw them.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts51">emu.message(string message)</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Displays given message on screen in the standard messages position. Use gui.text() when you need to position text.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts50">int emu.framecount()</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Returns the framecount value. The frame counter runs without a movie running so this always returns a value.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts50">int emu.lagcount()</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Returns the number of lag frames encountered. Lag frames are frames where the game did not poll for input because it missed the vblank. This happens when it has to compute too much within the frame boundary. This returns the number indicated on the lag counter.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts50">bool emu.lagged()</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Returns true if currently in a lagframe, false otherwise.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts50">bool emu.emulating()</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Returns true if emulation has started, or false otherwise. Certain operations such as using savestates are invalid to attempt before emulation has started. You probably won't need to use this function unless you want to make your script extra-robust to being started too early.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts50">bool emu.paused()</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Returns true if emulator is paused, false otherwise.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts50">bool emu.readonly()</span></p>
<p><span class="rvts37">Alias: movie.readonly</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Returns whether the emulator is in read-only state. &nbsp;</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">While this variable only applies to movies, it is stored as a global variable and can be modified even without a movie loaded. &nbsp;Hence, it is in the emu library rather than the movie library.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts50">emu.setreadonly(bool state)</span></p>
<p><span class="rvts37">Alias: movie.setreadonly</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Sets the read-only status to read-only if argument is true and read+write if false.</span></p>
<p><span class="rvts37">Note: This might result in an error if the medium of the movie file is not writeable (such as in an archive file).</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">While this variable only applies to movies, it is stored as a global variable and can be modified even without a movie loaded. &nbsp;Hence, it is in the emu library rather than the movie library.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts50">emu.registerbefore(function func)</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Registers a callback function to run immediately before each frame gets emulated. This runs after the next frame's input is known but before it's used, so this is your only chance to set the next frame's input using the next frame's would-be input. For example, if you want to make a script that filters or modifies ongoing user input, such as making the game think "left" is pressed whenever you press "right", you can do it easily with this.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Note that this is not quite the same as code that's placed before a call to emu.frameadvance. This callback runs a little later than that. Also, you cannot safely assume that this will only be called once per frame. Depending on the emulator's options, every frame may be simulated multiple times and your callback will be called once per simulation. If for some reason you need to use this callback to keep track of a stateful linear progression of things across frames then you may need to key your calculations to the results of emu.framecount.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Like other callback-registering functions provided by FCEUX, there is only one registered callback at a time per registering function per script. If you register two callbacks, the second one will replace the first, and the call to emu.registerbefore will return the old callback. You may register nil instead of a function to clear a previously-registered callback. If a script returns while it still has registered callbacks, FCEUX will keep it alive to call those callbacks when appropriate, until either the script is stopped by the user or all of the callbacks are de-registered.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts50">emu.registerafter(function func)</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Registers a callback function to run immediately after each frame gets emulated. It runs at a similar time as (and slightly before) gui.register callbacks, except unlike with gui.register it doesn't also get called again whenever the screen gets redrawn. Similar caveats as those mentioned in emu.registerbefore apply.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts50">emu.registerexit(function func)</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Registers a callback function that runs when the script stops. Whether the script stops on its own or the user tells it to stop, or even if the script crashes or the user tries to close the emulator, FCEUX will try to run whatever Lua code you put in here first. So if you want to make sure some code runs that cleans up some external resources or saves your progress to a file or just says some last words, you could put it here. (Of course, a forceful termination of the application or a crash from inside the registered exit function will still prevent the code from running.)</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Suppose you write a script that registers an exit function and then enters an infinite loop. If the user clicks "Stop" your script will be forcefully stopped, but then it will start running its exit function. If your exit function enters an infinite loop too, then the user will have to click "Stop" a second time to really stop your script. That would be annoying. So try to avoid doing too much inside the exit function.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Note that restarting a script counts as stopping it and then starting it again, so doing so (either by clicking "Restart" or by editing the script while it is running) will trigger the callback. Note also that returning from a script generally does NOT count as stopping (because your script is still running or waiting to run its callback functions and thus does not stop... see here for more information), even if the exit callback is the only one you have registered. </span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts50">bool emu.addgamegenie(string str)</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Adds a Game Genie code to the Cheats menu. Returns false and an error message if the code can't be decoded. Returns false if the code couldn't be added. Returns true if the code already existed, or if it was added.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Usage: emu.addgamegenie("NUTANT")</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Note that the Cheats Dialog Box won't show the code unless you close and reopen it.</span></p>
<p><span class="rvts50"><br></span></p>
<p><span class="rvts50"><br/></span></p>
<p><span class="rvts50">bool emu.delgamegenie(string str)</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Removes a Game Genie code from the Cheats menu. Returns false and an error message if the code can't be decoded. Returns false if the code couldn't be deleted. Returns true if the code didn't exist, or if it was deleted.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Usage: emu.delgamegenie("NUTANT")</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Note that the Cheats Dialog Box won't show the code unless you close and reopen it.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts50">emu.print(string str)</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Puts a message into the Output Console area of the Lua Script control window. Useful for displaying usage instructions to the user when a script gets run.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts50">emu.getscreenpixel(int x, int y, bool getemuscreen)</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Returns the separate RGB components of the given screen pixel, and the palette. Can be 0-255 by 0-239, but NTSC only displays 0-255 x 8-231 of it. If getemuscreen is false, this gets background colors from either the screen pixel or the LUA pixels set, but LUA data may not match the information used to put the data to the screen. If getemuscreen is true, this gets background colors from anything behind an LUA screen element.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Usage is local r,g,b,palette = emu.getscreenpixel(5, 5, false) to retrieve the current red/green/blue colors and palette value of the pixel at 5x5.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Palette value can be 0-63, or 254 if there was an error.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">You can avoid getting LUA data by putting the data into a function, and feeding the function name to emu.registerbefore.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts49">FCEU library</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">The FCEU library is the same as the emu library. It is left in for backwards compatibility. However, the emu library is preferred.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts52">ROM Library</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts50">rom.readbyte(int address)</span></p>
<p><span class="rvts50">rom.readbyteunsigned(int address)</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Get an unsigned byte from the actual ROM file at the given address. &nbsp;</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">This includes the header! It's the same as opening the file in a hex-editor.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts50">rom.readbytesigned(int address)</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Get a signed byte from the actual ROM file at the given address. Returns a byte that is signed.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">This includes the header! It's the same as opening the file in a hex-editor.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts52">Memory Library</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts50">memory.readbyte(int address)</span></p>
<p><span class="rvts50">memory.readbyteunsigned(int address)</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Get an unsigned byte from the RAM at the given address. Returns a byte regardless of emulator. The byte will always be positive.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts50">memory.readbyterange(int address, int length)</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Get a length bytes starting at the given address and return it as a string. Convert to table to access the individual bytes.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts50">memory.readbytesigned(int address)</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Get a signed byte from the RAM at the given address. Returns a byte regardless of emulator. The most significant bit will serve as the sign.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts50">memory.writebyte(int address, int value)</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Write the value to the RAM at the given address. The value is modded with 256 before writing (so writing 257 will actually write 1). Negative values allowed.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts50">int memory.getregister(cpuregistername)</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Returns the current value of the given hardware register.</span></p>
<p><span class="rvts37">For example, memory.getregister("pc") will return the main CPU's current Program Counter.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Valid registers are: "a", "x", "y", "s", "p", and "pc".</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts50">memory.setregister(string cpuregistername, int value)</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Sets the current value of the given hardware register.</span></p>
<p><span class="rvts37">For example, memory.setregister("pc",0x200) will change the main CPU's current Program Counter to 0x200.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Valid registers are: "a", "x", "y", "s", "p", and "pc".</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">You had better know exactly what you're doing or you're probably just going to crash the game if you try to use this function. That applies to the other memory.write functions as well, but to a lesser extent. </span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts50">memory.register(int address, [int size,] function func)</span></p>
<p><span class="rvts50">memory.registerwrite(int address, [int size,] function func)</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Registers a function to be called immediately whenever the given memory address range is written to.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">size is the number of bytes to "watch". For example, if size is 100 and address is 0x0200, then you will register the function across all 100 bytes from 0x0200 to 0x0263. A write to any of those bytes will trigger the function. Having callbacks on a large range of memory addresses can be expensive, so try to use the smallest range that's necessary for whatever it is you're trying to do. If you don't specify any size then it defaults to 1.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">The callback function will receive two arguments, (address, size) indicating what write operation triggered the callback. If you don't care about that extra information then you can ignore it and define your callback function to not take any arguments. The value that was written is NOT passed into the callback function, but you can easily use any of the memory.read functions to retrieve it.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">You may use a memory.write function from inside the callback to change the value that just got written. However, keep in mind that doing so will trigger your callback again, so you must have a "base case" such as checking to make sure that the value is not already what you want it to be before writing it. Another, more drastic option is to de-register the current callback before performing the write.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">If func is nil that means to de-register any memory write callbacks that the current script has already registered on the given range of bytes.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts50">memory.registerexec(int address, [int size,] function func)</span></p>
<p><span class="rvts50">memory.registerrun(int address, [int size,] function func)</span></p>
<p><span class="rvts50">memory.registerexecute(int address, [int size,] function func)</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Registers a function to be called immediately whenever the emulated system runs code located in the given memory address range.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Besides that, most of the information about memory.register applies to this function as well.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts52">Joypad Library</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts50">table joypad.get(int player)</span></p>
<p><span class="rvts51">table joypad.read(</span><span class="rvts50">int player</span><span class="rvts51">)</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Returns a table of every game button, where each entry is true if that button is currently held (as of the last time the emulation checked), or false if it is not held. This takes keyboard inputs, not Lua. The table keys look like this (case sensitive):</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">up, down, left, right, A, B, start, select</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Where a Lua truthvalue true means that the button is set, false means the button is unset. Note that only "false" and "nil" are considered a false value by Lua. &nbsp;Anything else is true, even the number 0.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">joypad.read left in for backwards compatibility with older versions of FCEU/FCEUX.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts50">table joypad.getimmediate(int player)</span></p>
<p><span class="rvts51">table joypad.readimmediate(</span><span class="rvts50">int player</span><span class="rvts51">)</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Returns a table of every game button, where each entry is true if that button is held at the moment of calling the function, or false if it is not held. This function polls keyboard input immediately, allowing Lua to interact with user even when emulator is paused.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">As of FCEUX 2.1.6, the function only works in Windows. In Linux this function will return nil.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts50">table joypad.getdown(int player)</span></p>
<p><span class="rvts50">table joypad.readdown(int player)</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Returns a table of only the game buttons that are currently held. Each entry is true if that button is currently held (as of the last time the emulation checked), or nil if it is not held.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts50">table joypad.getup(int player)</span></p>
<p><span class="rvts50">table joypad.readup(int player)</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Returns a table of only the game buttons that are not currently held. Each entry is nil if that button is currently held (as of the last time the emulation checked), or false if it is not held.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts50">joypad.set(int player, table input)</span></p>
<p><span class="rvts51">joypad.write(</span><span class="rvts50">int player, table input</span><span class="rvts51">)</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Set the inputs for the given player. Table keys look like this (case sensitive):</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">up, down, left, right, A, B, start, select</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">There are 4 possible values: true, false, nil, and "invert".</span></p>
<p><span class="rvts37">true &nbsp; &nbsp;- Forces the button on</span></p>
<p><span class="rvts37">false &nbsp; - Forces the button off</span></p>
<p><span class="rvts37">nil &nbsp; &nbsp; - User's button press goes through unchanged</span></p>
<p><span class="rvts37">"invert"- Reverses the user's button press</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Any string works in place of "invert". &nbsp;It is suggested as a convention to use "invert" for readability, but strings like "inv", "Weird switchy mechanism", "", or "true or false" works as well as "invert".</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">nil and "invert" exists so the script can control individual buttons of the controller without entirely blocking the user from having any control. Perhaps there is a process which can be automated by the script, like an optimal firing pattern, but the user still needs some manual control, such as moving the character around.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">joypad.write left in for backwards compatibility with older versions of FCEU/FCEUX.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts48">Zapper Library</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts51">table zapper.read()</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Returns the zapper data</span></p>
<p><span class="rvts37">When no movie is loaded this input is the same as the internal mouse input (which is used to generate zapper input, as well as the arkanoid paddle).</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">When a movie is playing, it returns the zapper data in the movie code.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">The return table consists of 3 values: x, y, and fire. &nbsp;x and y are the x,y coordinates of the zapper target in terms of pixels. &nbsp;fire represents the zapper firing. &nbsp;0 = not firing, 1 = firing</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Note: The zapper is always controller 2 on the NES so there is no player argument to this function.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts48">Input Library</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts50">table input.get()</span></p>
<p><span class="rvts50">table input.read()</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Reads input from keyboard and mouse. Returns pressed keys and the position of mouse in pixels on game screen. &nbsp;The function returns a table with at least two properties; table.xmouse and table.ymouse. &nbsp;Additionally any of these keys will be set to true if they were held at the time of executing this function:</span></p>
<p><span class="rvts37">leftclick, rightclick, middleclick, capslock, numlock, scrolllock, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, F1, F2, F3, F4, F5, F6, &nbsp;F7, F8, F9, F10, F11, F12, F13, F14, F15, F16, F17, F18, F19, F20, F21, F22, F23, F24, backspace, tab, enter, shift, control, alt, pause, escape, space, pageup, pagedown, end, home, left, up, right, down, numpad0, numpad1, numpad2, numpad3, numpad4, numpad5, numpad6, numpad7, numpad8, numpad9, numpad*, insert, delete, numpad+, numpad-, numpad., numpad/, semicolon, plus, minus, comma, period, slash, backslash, tilde, quote, leftbracket, rightbracket.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts50">string input.popup</span></p>
<p><span class="rvts37">Alias: gui.popup</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Requests input from the user using a multiple-option message box. See gui.popup for complete usage and returns.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts48">Savestate Library</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts51">object savestate.object(int slot = nil)</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Create a new savestate object. Optionally you can save the current state to one of the predefined slots(1-10) using the range 1-9 for slots 1-9, and 10 for 0, QWERTY style. Using no number will create an "anonymous" savestate.</span></p>
<p><span class="rvts37">Note that this does not actually save the current state! You need to create this value and pass it on to the load and save functions in order to save it.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Anonymous savestates are temporary, memory only states. You can make them persistent by calling memory.persistent(state). Persistent anonymous states are deleted from disk once the script exits.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts51">object savestate.create(int slot = nil)</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">savestate.create is identical to savestate.object, except for the numbering for predefined slots(1-10, 1 refers to slot 0, 2-10 refer to 1-9). It's being left in for compatibility with older scripts, and potentially for platforms with different internal predefined slot numbering.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts51">savestate.save(object savestate)</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Save the current state object to the given savestate. The argument is the result of savestate.create(). You can load this state back up by calling savestate.load(savestate) on the same object.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts51">savestate.load(object savestate)</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Load the the given state. The argument is the result of savestate.create() and has been passed to savestate.save() at least once.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">If this savestate is not persistent and not one of the predefined states, the state will be deleted after loading.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts50">savestate.persist(object savestate)</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Set the given savestate to be persistent. It will not be deleted when you load this state but at the exit of this script instead, unless it's one of the predefined states. &nbsp;If it is one of the predefined savestates it will be saved as a file on disk.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts50">savestate.registersave(function func)</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Registers a callback function that runs whenever the user saves a state. This won't actually be called when the script itself makes a savestate, so none of those endless loops due to a misplaced savestate.save.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">As with other callback-registering functions provided by FCEUX, there is only one registered callback at a time per registering function per script. Upon registering a second callback, the first is kicked out to make room for the second. In this case, it will return the first function instead of nil, letting you know what was kicked out. Registering nil will clear the previously-registered callback.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts50">savestate.registerload(function func)</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Registers a callback function that runs whenever the user loads a previously saved state. It's not called when the script itself loads a previous state, so don't worry about your script interrupting itself just because it's loading something.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">The state's data is loaded before this function runs, so you can read the RAM immediately after the user loads a state, or check the new framecount. Particularly useful if you want to update lua's display right away instead of showing junk from before the loadstate.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts50">savestate.loadscriptdata(int location)</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Accuracy not yet confirmed.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Intended Function, according to snes9x LUA documentation:</span></p>
<p><span class="rvts37">Returns the data associated with the given savestate (data that was earlier returned by a registered save callback) without actually loading the rest of that savestate or calling any callbacks. location should be a save slot number.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts52">Movie Library</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts50">bool movie.active()</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Returns true if a movie is currently loaded and false otherwise. &nbsp;(This should be used to guard against Lua errors when attempting to retrieve movie information).</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts50">int movie.framecount()</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Returns the current frame count. (Has the same affect as emu.framecount)</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts50">string movie.mode()</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Returns the current state of movie playback. Returns one of the following:</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">- "record"</span></p>
<p><span class="rvts37">- "playback"</span></p>
<p><span class="rvts37">- "finished"</span></p>
<p><span class="rvts37">- "taseditor"</span></p>
<p><span class="rvts37">- nil</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts50">movie.rerecordcounting(bool counting)</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Turn the rerecord counter on or off. Allows you to do some brute forcing without inflating the rerecord count.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts50">movie.stop()</span></p>
<p><span class="rvts50">movie.close()</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Stops movie playback. If no movie is loaded, it throws a Lua error.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts50">int movie.length()</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Returns the total number of frames of the current movie. Throws a Lua error if no movie is loaded.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts50">string movie.name()</span></p>
<p><span class="rvts50">string movie.getname()</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Returns the filename of the current movie with path. Throws a Lua error if no movie is loaded.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts50">movie.getfilename()</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Returns the filename of the current movie with no path. Throws a Lua error if no movie is loaded.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts50">movie.rerecordcount()</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Returns the rerecord count of the current movie. Throws a Lua error if no movie is loaded.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts50">movie.replay()</span></p>
<p><span class="rvts50">movie.playbeginning()</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Performs the Play from Beginning function. Movie mode is switched to read-only and the movie loaded will begin playback from frame 1.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">If no movie is loaded, no error is thrown and no message appears on screen.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts50">bool movie.readonly()</span></p>
<p><span class="rvts50">bool movie.getreadonly()</span></p>
<p><span class="rvts37">Alias: emu.getreadonly</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">FCEUX keeps the read-only status even without a movie loaded.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Returns whether the emulator is in read-only state. &nbsp;</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">While this variable only applies to movies, it is stored as a global variable and can be modified even without a movie loaded. &nbsp;Hence, it is in the emu library rather than the movie library.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts50">movie.setreadonly(bool state)</span></p>
<p><span class="rvts37">Alias: emu.setreadonly</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">FCEUX keeps the read-only status even without a movie loaded.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Sets the read-only status to read-only if argument is true and read+write if false.</span></p>
<p><span class="rvts37">Note: This might result in an error if the medium of the movie file is &nbsp;not writeable (such as in an archive file).</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">While this variable only applies to movies, it is stored as a global variable and can be modified even without a movie loaded. &nbsp;Hence, it is in the emu library rather than the movie library.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts50">bool movie.recording()</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Returns true if there is a movie loaded and in record mode.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts50">bool movie.playing()</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Returns true if there is a movie loaded and in play mode.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts50">bool movie.ispoweron()</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Returns true if the movie recording or loaded started from 'Start'.</span></p>
<p><span class="rvts37">Returns false if the movie uses a save state.</span></p>
<p><span class="rvts37">Opposite of movie.isfromsavestate()</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts50">bool movie.isfromsavestate()</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Returns true if the movie recording or loaded started from 'Now'.</span></p>
<p><span class="rvts37">Returns false if the movie was recorded from a reset.</span></p>
<p><span class="rvts37">Opposite of movie.ispoweron()</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts50">string movie.name()</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">If a movie is loaded it returns the name of the movie, else it throws an error.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts50">bool movie.readonly()</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Returns the state of read-only. True if in playback mode, false if in record mode.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts48">GUI Library</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts50">gui.pixel(int x, int y, type color)</span></p>
<p><span class="rvts50">gui.drawpixel(int x, int y, type color)</span></p>
<p><span class="rvts50">gui.setpixel(int x, int y, type color)</span></p>
<p><span class="rvts50">gui.writepixel(int x, int y, type color)</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Draw one pixel of a given color at the given position on the screen. See drawing notes and color notes at the bottom of the page. &nbsp;</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts50">gui.getpixel(int x, int y)</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Returns the separate RGBA components of the given pixel set by gui.pixel. This only gets LUA pixels set, not background colors.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Usage is local r,g,b,a = gui.getpixel(5, 5) to retrieve the current red/green/blue/alpha values of the LUA pixel at 5x5.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">See emu.getscreenpixel() for an emulator screen variant.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts50">gui.line(int x1, int y1, int x2, int y2 [, color [, skipfirst]])</span></p>
<p><span class="rvts50">gui.drawline(int x1, int y1, int x2, int y2 [, color [, skipfirst]])</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Draws a line between the two points. The x1,y1 coordinate specifies one end of the line segment, and the x2,y2 coordinate specifies the other end. If skipfirst is true then this function will not draw anything at the pixel x1,y1, otherwise it will. skipfirst is optional and defaults to false. The default color for the line is solid white, but you may optionally override that using a color of your choice. See also drawing notes and color notes at the bottom of the page.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts50">gui.box(int x1, int y1, int x2, int y2 [, fillcolor [, outlinecolor]]))</span></p>
<p><span class="rvts50">gui.drawbox(int x1, int y1, int x2, int y2 [, fillcolor [, outlinecolor]]))</span></p>
<p><span class="rvts50">gui.rect(int x1, int y1, int x2, int y2 [, fillcolor [, outlinecolor]]))</span></p>
<p><span class="rvts50">gui.drawrect(int x1, int y1, int x2, int y2 [, fillcolor [, outlinecolor]]))</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Draws a rectangle between the given coordinates of the emulator screen for one frame. The x1,y1 coordinate specifies any corner of the rectangle (preferably the top-left corner), and the x2,y2 coordinate specifies the opposite corner.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">The default color for the box is transparent white with a solid white outline, but you may optionally override those using colors of your choice. Also see drawing notes and color notes.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts50">gui.text(int x, int y, string str [, textcolor [, backcolor]])</span></p>
<p><span class="rvts50">gui.drawtext(int x, int y, string str [, textcolor [, backcolor]])</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Draws a given string at the given position. textcolor and backcolor are optional. See 'on colors' at the end of this page for information. Using nil as the input or not including an optional field will make it use the default.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts50">gui.parsecolor(color)</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Returns the separate RGBA components of the given color.</span></p>
<p><span class="rvts37">For example, you can say local r,g,b,a = gui.parsecolor('orange') to retrieve the red/green/blue values of the preset color orange. (You could also omit the a in cases like this.) This uses the same conversion method that FCEUX uses internally to support the different representations of colors that the GUI library uses. Overriding this function will not change how FCEUX interprets color values, however.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts50">gui.savescreenshot()</span></p>
<p><span class="rvts37">Makes a screenshot of the FCEUX emulated screen, and saves it to the appropriate folder. Performs identically to pressing the Screenshot hotkey.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts50">gui.savescreenshotas(string name)</span></p>
<p><span class="rvts37">Makes a screenshot of the FCEUX emulated screen, and saves it to the appropriate folder. However, this one receives a file name for the screenshot.</span></p>
<p><span class="rvts37"> </span></p>
<p><span class="rvts50">string gui.gdscreenshot()</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Takes a screen shot of the image and returns it in the form of a string which can be imported by the gd library using the gd.createFromGdStr() function.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">This function is provided so as to allow FCEUX to not carry a copy of the gd library itself. If you want raw RGB32 access, skip the first 11 bytes (header) and then read pixels as Alpha (always 0), Red, Green, Blue, left to right then top to bottom, range is 0-255 for all colors.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts56">Warning:</span><span class="rvts37"> Storing screen shots in memory is not recommended. Memory usage will blow up pretty quick. One screen shot string eats around 230 KB of RAM.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts50">gui.gdoverlay([int dx=0, int dy=0,] string str [, sx=0, sy=0, sw, sh] [, float alphamul=1.0])</span></p>
<p><span class="rvts50">gui.image([int dx=0, int dy=0,] string str [, sx=0, sy=0, sw, sh] [, float alphamul=1.0])</span></p>
<p><span class="rvts50">gui.drawimage([int dx=0, int dy=0,] string str [, sx=0, sy=0, sw, sh] [, float alphamul=1.0])</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Draws an image on the screen. gdimage must be in truecolor gd string format.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Transparency is fully supported. Also, if alphamul is specified then it will modulate the transparency of the image even if it's originally fully opaque. (alphamul=1.0 is normal, alphamul=0.5 is doubly transparent, alphamul=3.0 is triply opaque, etc.)</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">dx,dy determines the top-left corner of where the image should draw. If they are omitted, the image will draw starting at the top-left corner of the screen.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">gui.gdoverlay is an actual drawing function (like gui.box and friends) and thus must be called every frame, preferably inside a gui.register'd function, if you want it to appear as a persistent image onscreen.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Here is an example that loads a PNG from file, converts it to gd string format, and draws it once on the screen:</span></p>
<p><span class="rvts37">local gdstr = gd.createFromPng("myimage.png"):gdStr()</span></p>
<p><span class="rvts37">gui.gdoverlay(gdstr) </span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts50">gui.opacity(int alpha)</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Scales the transparency of subsequent draw calls. An alpha of 0.0 means completely transparent, and an alpha of 1.0 means completely unchanged (opaque). Non-integer values are supported and meaningful, as are values greater than 1.0. It is not necessary to use this function (or the less-recommended gui.transparency) to perform drawing with transparency, because you can provide an alpha value in the color argument of each draw call. However, it can sometimes be convenient to be able to globally modify the drawing transparency. </span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts50">gui.transparency(int trans)</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Scales the transparency of subsequent draw calls. Exactly the same as gui.opacity, except the range is different: A trans of 4.0 means completely transparent, and a trans of 0.0 means completely unchanged (opaque). </span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts50">function gui.register(function func)</span></p>
<p><span class="rvts50"><br></span></p>
<p><span class="rvts50"><br/></span></p>
<p><span class="rvts37">Register a function to be called between a frame being prepared for displaying on your screen and it actually happening. Used when that 1 frame delay for rendering is not acceptable.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts50">string gui.popup(string message [, string type = "ok" [, string icon = "message"]])</span></p>
<p><span class="rvts50">string input.popup(string message [, string type = "yesno" [, string icon = "question"]])</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Brings up a modal popup dialog box (everything stops until the user dismisses it). The box displays the message tostring(msg). This function returns the name of the button the user clicked on (as a string).</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">type determines which buttons are on the dialog box, and it can be one of the following: 'ok', 'yesno', 'yesnocancel', 'okcancel', 'abortretryignore'.</span></p>
<p><span class="rvts37">type defaults to 'ok' for gui.popup, or to 'yesno' for input.popup.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">icon indicates the purpose of the dialog box (or more specifically it dictates which title and icon is displayed in the box), and it can be one of the following: 'message', 'question', 'warning', 'error'.</span></p>
<p><span class="rvts37">icon defaults to 'message' for gui.popup, or to 'question' for input.popup.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Try to avoid using this function much if at all, because modal dialog boxes can be irritating. </span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Linux users might want to install xmessage to perform the work. Otherwise the dialog will appear on the shell and that's less noticeable.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts48">Sound Library</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts50">table sound.get()</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Returns current state of PSG channels in big array.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">table:</span></p>
<p><span class="rvts37">{</span></p>
<p><span class="rvts37"> &nbsp;rp2a03:</span></p>
@ -659,10 +659,10 @@
<p><span class="rvts37"> &nbsp; &nbsp;}</span></p>
<p><span class="rvts37"> &nbsp;}</span></p>
<p><span class="rvts37">}</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts48">TAS Editor Library</span></p>
<p><span class="rvts50"><br></span></p>
<p><span class="rvts50"><br/></span></p>
<p><span class="rvts50">taseditor.registerauto(function func)</span></p>
<p><span class="rvts50">taseditor.registermanual(function func)</span></p>
<p><span class="rvts50">bool taseditor.engaged()</span></p>
@ -687,42 +687,42 @@
<p><span class="rvts50">taseditor.submitdeleteframes(int frame, int number)</span></p>
<p><span class="rvts50">int taseditor.applyinputchanges([string name])</span></p>
<p><span class="rvts50">taseditor.clearinputchanges()</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">For full description of these functions refer to TAS Editor Manual.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts48">Bitwise Operations</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">All the following functions are left for backward compatibility, since </span><a class="rvts59" href="http://bitop.luajit.org/">LuaBitOp</a><span class="rvts37"> is embedded in FCEUX.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts53">int AND(int n1, int n2, ..., int nn)</span></p>
<p><span class="rvts53"><br></span></p>
<p><span class="rvts53"><br/></span></p>
<p><span class="rvts37">Binary logical AND of all the given integers. This function compensates for Lua's lack of it.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts53">int OR(int n1, int n2, ..., int nn)</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Binary logical OR of all the given integers. This function compensates for Lua's lack of it.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts53">int XOR(int n1, int n2, ..., int nn)</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Binary logical XOR of all the given integers. This function compensates for Lua's lack of it.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts53">int BIT(int n1, int n2, ..., int nn)</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Returns an integer with the given bits turned on. Parameters should be smaller than 31.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts54">Appendix</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts55">On drawing</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">A general warning about drawing is that it is always one frame behind unless you use gui.register. This is because you tell the emulator to paint something but it will actually paint it when generating the image for the next frame. So you see your painting, except it will be on the image of the next frame. You can prevent this with gui.register because it gives you a quick chance to paint before blitting.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Dimensions &amp; color depths you can paint in:</span></p>
<p><span class="rvts37">--320x239, 8bit color (confirm?)</span></p>
<p><span class="rvts37">256x224, 8bit color (confirm?)</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts55">On colors</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Colors can be of a few types.</span></p>
<p><span class="rvts37">Int: use the a formula to compose the color as a number (depends on color depth)</span></p>
<p><span class="rvts37">String: Can either be a HTML colors, simple colors, or internal palette colors.</span></p>
@ -731,10 +731,10 @@
<p><span class="rvts37">Array: Example: {255,112,48,96} means {red=255, green=112, blue=48, alpha=96} </span></p>
<p><span class="rvts37">Table: Example: {r=255,g=112,b=48,a=96} means {red=255, green=112, blue=48, alpha=96} </span></p>
<p><span class="rvts37">Palette: Example: "P00" for Palette 00. "P3F" for palette 3F. P40-P7F are for LUA.</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">For transparancy use "clear".</span></p>
<p><span class="rvts37"><br></span></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com">Easy CHM and documentation editor</a></p>
<p><span class="rvts37"><br/></span></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour">Easily create EPub books</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>Getting Started</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -53,42 +53,42 @@
<div id="topic_content">
<p><span class="rvts47">Using Lua scripting</span></p>
<p><span class="rvts38"><br></span></p>
<p><span class="rvts38"><br/></span></p>
<p>Lua is built into FCEUX as of 2.1.2, and luapack DLL files are no longer needed in this and later versions.</p>
<p><br></p>
<p><br/></p>
<p>To run lua scripts in older versions of FCEUX, you will need the lua pack which can be found <a class="rvts18" href="http://fceux.com/luapack">here</a>. The .dll files must be unzipped in the same folder as fceux.exe.</p>
<p><span class="rvts47"><br></span></p>
<p><span class="rvts47"><br/></span></p>
<p><span class="rvts47">Core Lua Documentation</span></p>
<p><span class="rvts38"><br></span></p>
<p><span class="rvts38"><br/></span></p>
<p>If you have never programmed, you will probably want to start by learning the basic of Lua, which is too broad for the scope of this help file. &nbsp;Try searching on the Internet for "Lua tutorial". &nbsp;As of this writing, it's official homepage is <a class="rvts18" href="http://www.lua.org/">http://www.lua.org/</a></p>
<p><br></p>
<p><br/></p>
<p>If you are familiar with any programming language you will probably not have too much difficulty adjusting to the syntax and structure of Lua. &nbsp;You will probably also find useful information on the Internet.</p>
<p><span class="rvts47"><br></span></p>
<p><span class="rvts47"><br/></span></p>
<p><span class="rvts47">GUI Frontend</span></p>
<p><br></p>
<p><br/></p>
<p>To use a Lua script, you need to create one in a text editor. &nbsp;The name of the file created should end in .lua to indicate that it is a Lua script.</p>
<p><br></p>
<p><br/></p>
<p>To run a Lua script, choose "Run Lua Script" ***from where*** &nbsp;In the dialog that pops up, click "Browse" and find the file you wish to run. &nbsp;This will insert the path of this file into the dialog. &nbsp;You can then click on "Run" to run the script or "Cancel" to return to FCEUX without running the script.</p>
<p><br></p>
<p><br/></p>
<p>To end a Lua script, choose "Stop Lua Script" ***from where***.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts47">FCEUX Lua Basics</span></p>
<p><br></p>
<p><br/></p>
<p>Your script will be constructed according to the rules of Lua, but you will use FCEUX-specific functions to interact with the emulator. &nbsp;For example, one of the most often-used functions is emu.frameadvance() which will tell the emulator to advance exactly one frame, which is the basic unit of time on an NES.</p>
<p><br></p>
<p><br/></p>
<p>In general, your script will probably want to be run until you tell it to stop, so it will look something like this:</p>
<p><br></p>
<p><br/></p>
<p>emu.speedmode("normal") -- Set the speed of the emulator</p>
<p><br></p>
<p><br/></p>
<p>-- Declare and set variables or functions if needed</p>
<p><br></p>
<p><br/></p>
<p>while true do</p>
<p> &nbsp; -- Execute instructions for FCEUX</p>
<p> &nbsp; emu.frameadvance() -- This essentially tells FCEUX to keep running</p>
<p>end</p>
<p><br></p>
<p><br/></p>
<p>The way instructions are sent to FCEUX is through a set of specially defined functions (and variables) which are called an API, the specification of which follows.</p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/help-authoring-tool">Free help authoring environment</a></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour">Easily create Help documents</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>Lua Scripting</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -49,28 +49,28 @@
<div id="topic_content">
<p><span class="rvts17">Lua Scripting</span></p>
<p><br></p>
<p><br/></p>
<p>Lua is a scripting language similar to Perl or Python. &nbsp;It allows for logical evaluation equivalent to languages like C but in a much more dynamic way that eliminates much of the need to compile programs and worry about low level resource management like deleting objects. &nbsp;In the context of FCEUX, Lua allows for direct control of the emulator through this logical construct.</p>
<p><br></p>
<p><br/></p>
<p>What this means to the non-"programmer" is that it you can essentially automate certain tasks in FCEUX, such as holding controller inputs, displaying additional graphical information and saving/loading savestates.</p>
<p><br></p>
<p><br/></p>
<p>A bit of previous programming knowledge will be useful in taking advantage of this feature, but it is certainly not a requirement. &nbsp;Lua is specifically written with the intention of being easier than most languages for anyone to understand and use.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><a class="rvts46" href="LuaGettingStarted.html">Getting Started</a></p>
<p><br></p>
<p><br/></p>
<p>The basics of Lua scripting, its implementation into FCEUX, and how to get started using Lua.</p>
<p><br></p>
<p><br/></p>
<p><a class="rvts46" href="Commands.html">Using Lua</a></p>
<p><br></p>
<p><br/></p>
<p>How to use Lua and basic syntax/commands that are useable under FCEUX.</p>
<p><br></p>
<p><br/></p>
<p><a class="rvts46" href="LuaFunctionsList.html">Lua Functions List</a></p>
<p><br></p>
<p><br/></p>
<p>A list of Lua functions available in FCEUX and a brief description of each.</p>
<p><br></p>
<p><br/></p>
<p><a class="rvts46" href="LuaBot.html">Lua Bot</a></p>
<p><br></p>
<p><br/></p>
<p>How to use Luau's version of Basic bot.</p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour/iphone-website-generation">Free iPhone documentation generator</a></p>
</div>

View File

@ -3,7 +3,7 @@
<head>
<title>Map Hotkeys</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -53,15 +53,15 @@
<div id="topic_content">
<p><span class="rvts17">Map Hotkeys</span></p>
<p><br></p>
<p><br/></p>
<p>The map hotkeys dialog allows you to assign hotkeys to various FCEUX commands.</p>
<p><br></p>
<p><br/></p>
<p>To assign or remove a hotkey assignment, double click on the name of the hotkey in the list box. &nbsp;Then press the key combination you wish to assign it. &nbsp;To clear the assignment, press the clear button.</p>
<p><br></p>
<p><br/></p>
<p>The filter pull down menu allows you to only see hotkey listings in various categories (the list shows all hotkey assignments by default).</p>
<p><br></p>
<p><br/></p>
<p>The Restore defaults button will change all hotkeys to their default values.</p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/help-authoring-tool">Create HTML Help, DOC, PDF and print manuals from 1 single source</a></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour">Full featured Help generator</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>Memory Watch</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -53,68 +53,68 @@
<div id="topic_content">
<p><span class="rvts17">Memory Watch</span></p>
<p><span class="rvts12"><br></span></p>
<p><span class="rvts12"><br/></span></p>
<p><span class="rvts12">Overview</span></p>
<p><span class="rvts12"><br></span></p>
<p><span class="rvts12"><br/></span></p>
<p>Memory watch is a tool designed to values of specific known memory values in the game's <a class="rvts18" href="NESRAMMappingFindingValues.html">RAM</a>. Memory watch does not find values. &nbsp;To find useful values to monitor, see <a class="rvts18" href="CheatSearch.html">Cheats</a>, <span class="rvts18">Ram filter</span>, <a class="rvts18" href="HexEditor.html">Hex Editor</a>, and <a class="rvts18" href="Debugger.html">Debugger</a>.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts16">Inserting Values</span></p>
<p><br></p>
<p><br/></p>
<p>To display a ram value, simply type its address into one of the address fields. &nbsp;The name field allows you to put a brief description of the value. &nbsp; </p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts28">Prefixes</span></p>
<p><br></p>
<p><br/></p>
<p>You must put in the hexi-decimal value of the address, &nbsp;but the value will be displayed will be decimal by default.</p>
<p><br></p>
<p><br/></p>
<p>To display the value in hex, use a prefix of "x" (such as x00FD). &nbsp;</p>
<p><br></p>
<p><br/></p>
<p>Use the prefix "!" to display a 2 byte value. </p>
<p><br></p>
<p><br/></p>
<p>Use a prefix of "X" to watch a 2 byte value in hex.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts28">Saving/Loading Watch files</span></p>
<p><br></p>
<p><br/></p>
<p>You can save your addresses into watch files, as well as loading previous files using the standard save,load,new options in the File menu.</p>
<p><br></p>
<p><br/></p>
<p>FCEUX uses the /memw folder by default but you can specify a new default folder in the <a class="rvts18" href="Directories.html">Directory Override</a> menu.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts28">Options Menu</span></p>
<p><br></p>
<p><br/></p>
<p>If you select <span class="rvts38">Load on Start up</span>, Memory watch will load up automatically when FCEU is started. </p>
<p><br></p>
<p><br/></p>
<p>If you select <span class="rvts38">Load Last File on Start up</span>, the most recent file in the Recent folder will be loaded when memory watch is loaded.</p>
<p><br></p>
<p><br/></p>
<p>If you select <span class="rvts38">Collapse to 1 Column </span>(or press the right arrow button on the bottom left of the dialog), the memory watch dialog is reduced to just 1 column.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts16">Frozen Memory Addresses</span></p>
<p><br></p>
<p><br/></p>
<p>If one of the watched addresses is frozen by the <a class="rvts18" href="CheatSearch.html">cheats dialog</a> or the <a class="rvts18" href="HexEditor.html">hex editor</a>, it will display blue in the memory watch dialog.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts12">Memory Change Monitor</span></p>
<p><br></p>
<p><br/></p>
<p>The bottom of the memory watch dialog displays a memory change monitoring section. &nbsp;This monitors the 1st two values of each memory watch column. &nbsp;Rather than monitoring the value itself, this monitors the value's behavior. &nbsp;</p>
<p><br></p>
<p><br/></p>
<p>The address being monitored is under the address column.</p>
<p><br></p>
<p><br/></p>
<p>The Formula drop down box shows which criteria the change monitoring is using.</p>
<p><br></p>
<p><br/></p>
<p>The count value displays how many times the value has changed based on the criteria.</p>
<p><br></p>
<p><br/></p>
<p>Reset will reset the count to 0.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts43">Usage Example:</span></p>
<p><br></p>
<p><br/></p>
<p>As an example of the memory change monitoring, Let's say we are recording a movie of the game Super C and want to keep track of when the game lags.</p>
<p>The ram address 001C functions as a "lag flag". &nbsp;It will remain 0, then change to a positive value on a frame that the game lags.</p>
<p><br></p>
<p><br/></p>
<p>We could put 001C in one of the 1st two memory watch edit boxes. &nbsp;Then set the corresponding formula in the memory change monitoring to "&gt; then" (greater than). &nbsp;Now the count will show us how many lag frames occur in the movie.</p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com">Free PDF documentation generator</a></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour">Easily create HTML Help documents</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>Movie Options</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -53,52 +53,52 @@
<div id="topic_content">
<p><span class="rvts17">Movie Options</span></p>
<p><span class="rvts15"><br></span></p>
<p><span class="rvts15"><br></span></p>
<p><span class="rvts15"><br/></span></p>
<p><span class="rvts15"><br/></span></p>
<p>The movie option dialog has various settings related to movie making.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts16">Always suggest Read-Only replay</span></p>
<p><br></p>
<p><br/></p>
<p>If checked, FCEUX will automatically check "Open Read-Only" checkbox when showing "Play Movie" dialog. If unchecked, the "Open Read-Only" checkbox state will depend on current movie status.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts16">Pause After Movie Playback</span></p>
<p><br></p>
<p><br/></p>
<p>If checked, FCEUX will automatically pause emulation when reaching the last frame of a movie file.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts16">Close After Movie Playback</span></p>
<p><br></p>
<p><br/></p>
<p>If checked, FCEUX will close the movie after replaying its last frame. If unchecked, when reaching the last frame the movie will switch to "MOVIE_FINISHED" state, still allowing you to load its savestates.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts16">Bind savestates to movies</span></p>
<p><br></p>
<p><br/></p>
<p>Affects the savestate naming system when a movie is loaded. &nbsp;If checked, the movie name will be appended to a savestate filename.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts16">Display movie subtitles</span></p>
<p><br></p>
<p><br/></p>
<p>Toggles whether or not movie subtitles (imbedded into the .fm2 file, see <a class="rvts18" href="fm2.html">.fm2</a> documentation) will be displayed on screen.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts16">Put movie subtitles in AVI</span></p>
<p><br></p>
<p><br/></p>
<p>Toggles whether or not movie subtitles will be recorded into a .avi file.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts16">Automatically backup movies</span></p>
<p><br></p>
<p><br/></p>
<p>If checked, the auto-movie backup is toggled on. &nbsp;Whenever a movie is loaded then set into record mode (by loading a savestate while in read-write mode), a backup copy of the .fm2 is saved before changing the file. &nbsp;</p>
<p><br></p>
<p><br/></p>
<p>Movie backups will be created only once each time a movie is loaded into FCEUX. &nbsp;Movie backups are appended with a backup number and the .bak file extension.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts16">Load full savestate-movies</span></p>
<p><br></p>
<p><br/></p>
<p>If checked, FCEUX will not truncate movie immediately when you load its savestate in Recording mode (thus behaving similar to VBA-rr and Snes9x emulators). If unchecked, the movie will always shrink to the frame of the savestate you loaded.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/help-authoring-tool">Single source CHM, PDF, DOC and HTML Help creation</a></p>
</div>

View File

@ -3,7 +3,7 @@
<head>
<title>Movie Recording</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -53,90 +53,90 @@
<div id="topic_content">
<p><span class="rvts17">Movie Recording</span></p>
<p><br></p>
<p><br/></p>
<p><span class="rvts16">Introduction</span></p>
<p><br></p>
<p><br/></p>
<p>A movie file is a file which contains data needed to reconstruct actions in a game. In most emulators, the movie files consist of simply the buttons that were pressed during the game. Because the emulation is completely predictable (deterministic), it will always play back the same way.</p>
<p><br></p>
<p><br/></p>
<p>Unless the movie starts from the console power-on or from reset, the movie file might also contain a savestate that loads the beginning point of the game. &nbsp;Movie files dont contain any sound or image data. Such data is not needed, because the emulator can reconstruct it during movie playback. </p>
<p><br></p>
<p><br/></p>
<p>Movie files in FCEUX are .fm2 files. &nbsp;The file format is unique to FCEUX and not compatible with other movie recording versions of FCE Ultra. &nbsp;Movie files from other versions (.fcm) can be converted to .fm2 for playback with the <a class="rvts18" href="Covertfcm.html">.fcm to .fm2 converter</a>.</p>
<p><br></p>
<p><br/></p>
<p>Movie features in FCEUX are designed specifically for making Tool-assisted Speedruns. &nbsp;For more information visit <a class="rvts18" href="http://tasvideos.org" target="_blank">TASVideos</a>.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts16">Recording Movies</span></p>
<p><br></p>
<p><br/></p>
<p>To record a movie, open a ROM. &nbsp;Then simply select "Record Movie" in the File &gt; Movie Menu. &nbsp;You will be prompted to name the file and to select where to record from. &nbsp;Selecting "Start" will begin the recording from a Power-on (Hard Reset). &nbsp;If you select "Now", a savestate will be made at your current location in the game, and the movie will begin recording from there. &nbsp;If you select browse, you will be prompted to find a preexisting savestate file to begin recording from.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts16">Savestates, Slowdown, and Frame Advance</span></p>
<p><br></p>
<p><br/></p>
<p>At anytime while recording, you can make a *savestate. &nbsp;This is a snapshot of the game's current memory contents. &nbsp;Once a savestate is made, it can be loaded with the *loadstate command. &nbsp;This will return the movie back to the spot in the game where the savestate was made. &nbsp;This can be used to undo mistakes or to test different strategies for a particular segment.</p>
<p><br></p>
<p><br/></p>
<p>(The default key for making a savestate is "I" and the default key for loading a state is "P". &nbsp;Both of these can be assigned under the <a class="rvts18" href="MapHotkeys.html">Map Hotkeys Menu</a>). &nbsp;Both can also be access through the File &gt; Savestate Menu</p>
<p><br></p>
<p><br/></p>
<p>Tool Assisted movies take advantage of slowing the emulator down in order to increase precision of the movie making process. &nbsp;Navigating to NES &gt; Emulation Speed &gt; Slow down or pressing the "-" key will slow down emulation. &nbsp;NES &gt; Emulation Speed &gt; Speed up or the "=" will speed it up. &nbsp;(These can be re-mapped in the <a class="rvts18" href="MapHotkeys.html">Map Hotkeys Menu</a>).</p>
<p><br></p>
<p><br/></p>
<p>Even greater precision can be made using the frame advance key. &nbsp;Pressing the frame advance key will pause emulation and advance it a single frame (1/60th of a second NTSC ). &nbsp;By holding down input and pressing the frame advance key, it will record that input for that particular frame.</p>
<p><br></p>
<p><br/></p>
<p>For more info seeing <a class="rvts18" href="ToolAssistedSpeedruns.html">Tool Assisted Speedruns</a>.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts16">"Bullet Proof Rerecording"</span></p>
<p><br></p>
<p><br/></p>
<p>All savestates made during movie recording contain the movie information up to the frame of the savestate. &nbsp;When a savestate is loaded, the movie file in the savestate is also loaded. &nbsp;This is referred to as "Bullet Proof Rerecording" because it prevents possible desyncs and lost data from improper/out of order savestate loading.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts16">Playing Back Movies</span></p>
<p><br></p>
<p><br/></p>
<p>To play back a recorded movie, open the ROM. &nbsp;Then select "Replay Movie" in the File Menu. &nbsp;A movie dialog box will open where you can select the movie file. &nbsp;</p>
<p><br></p>
<p><br/></p>
<p>You can also select whether the movie is in Read-only mode. &nbsp;If a movie is in read-only mode, the movie file can not be altered in any way. &nbsp;If you make a savestate while playing the movie and load that state, the playback will simply "rewind" to that state. &nbsp;If the movie is not in read-only, however, loading a state will set the movie to record mode and begin recording from that savestate.</p>
<p><br></p>
<p><br/></p>
<p>You can also select "Pause movie at frame" x. &nbsp;If selected, the movie will automatically pause when reaching the frame selected (the default is the last frame of the movie).</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts16">Read only</span></p>
<p><br></p>
<p><br/></p>
<p>You can select read-only when playing a movie. &nbsp;You can also toggle the read-only status by navigating to File &gt; Movie &gt; Read only.</p>
<p>In read-only mode a movie can not be edited. &nbsp;Loading a savestate will take the movie to that point in the movie and stay in playback mode.</p>
<p><br></p>
<p><br/></p>
<p>In read-write status, loading a state will change a movie from playback mode to record mode.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts16">Resuming Recording</span></p>
<p><br></p>
<p><br/></p>
<p>You can resume recording a previous movie by playing back the movie, setting the record status to read+write, and then loading a state.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts16">Play Movie from Beginning</span></p>
<p><br></p>
<p><br/></p>
<p>At any point while recording or playing back a movie, you can navigate to File &gt; Movie &gt; Play Movie from Beginning. &nbsp;This will set the movie to read only status and reset playback to frame 0.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts16">Frame Counter</span></p>
<p><br></p>
<p><br/></p>
<p>The Frame counter displays what frame the movie is currently on. &nbsp;If the movie is playing in read-only mode, it will also display the total number of frames in the movie. &nbsp;The default key for toggling the Frame Counter display is the "." (period) key. &nbsp;(This can be re-mapped in the <a class="rvts18" href="MapHotkeys.html">Map Hotkeys Menu</a>).</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts16">Frame Advance</span></p>
<p><br></p>
<p><br/></p>
<p>The frame advance key ("backlash" key by default. &nbsp;Re-mappable under the <a class="rvts18" href="MapHotkeys.html">Map Hotkeys Menu</a>) will advance the game by a single frame and then pause the game. &nbsp; If the hotkey is held down, it will auto advance quickly through the game.</p>
<p><br></p>
<p><br/></p>
<p>This is a critical tool when perfecting input in movie recording.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts16">Metadata</span></p>
<p><br></p>
<p><br/></p>
<p>When you record a new movie via the record movie dialog there is an author field. &nbsp;This sends the info to the .fm2 file in the form of comment Author [author name] (see <a class="rvts18" href="fm2.html">.fm2</a>). &nbsp;</p>
<p><br></p>
<p><br/></p>
<p>Any line in the .fm2 that starts with "comment" is known as metadata. &nbsp;You can include any number of comments manually by editing the .fm2 file with any text editor. &nbsp;</p>
<p><br></p>
<p><br/></p>
<p>On the replay movie dialog, clicking the metadata button will display all metadata in a separate dialog box (If a movie is currently loaded you can also access the meta-data by right-clicking and selecting Metadata in the context menu).</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts16">Subtitles</span></p>
<p><br></p>
<p><br/></p>
<p>FCEUX now supports subtitles in the .fm2 file format. &nbsp;Subtitles will be displayed on the screen automatically as a movie plays. &nbsp;You can turn on/off subtitles by navigating to Config &gt; Movie Options &gt; Display movie subtitles (see <a class="rvts18" href="MovieOptions.html">Movie options</a>).</p>
<p><br></p>
<p><br/></p>
<p>For adding subtitles to a movie see the <a class="rvts18" href="fm2.html">.fm2 documentation</a>.</p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour">Easily create Web Help sites</a></p>
</div>

View File

@ -3,7 +3,7 @@
<head>
<title>Movie &amp; Savestate formats</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -53,15 +53,15 @@
<div id="topic_content">
<p><span class="rvts17">Movie and Savestate File Formats</span></p>
<p><br></p>
<p><br/></p>
<p>The Following documentation deals with the specific technical information regarding the format of movie &amp; savestate files.</p>
<p><br></p>
<p><br/></p>
<p><a class="rvts26" href="fm2.html">.fm2</a> - FCEUX Movie file format</p>
<p><br></p>
<p><br/></p>
<p><a class="rvts26" href="fcm.html">.fcm</a> - Movie file format from previous FCEU versions (compatible with FCEUX via <a class="rvts18" href="Covertfcm.html">Convert FCM</a>)</p>
<p><br></p>
<p><br/></p>
<p><a class="rvts26" href="fcs.html">.fcs</a> - Savestate file format</p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/help-authoring-tool">Easy to use tool to create HTML Help files and Help web sites</a></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com">Easy CHM and documentation editor</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>NES Menu</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -53,43 +53,43 @@
<div id="topic_content">
<p><span class="rvts17">NES</span></p>
<p><br></p>
<p><br/></p>
<p>Explains commands in the NES menu of FCEUX.</p>
<p>All these commands can be mapped to a keyboard/joypad button in the <a class="rvts18" href="MapHotkeys.html">Map Hotkeys Menu</a>.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts16">Reset</span></p>
<p>Emulates the pressing of the Reset Button on the NES. ("Soft reset").</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts16">Power</span></p>
<p>Emulates a power cycle, which is turning the power on and off with the Power button on the NES. ("Hard Reset")</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts16">Eject/Insert Disk</span></p>
<p>Ejects or inserts a FDS disk. &nbsp;(See <a class="rvts18" href="FamicomDiskSytem.html">Famicom Disk System</a>)</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts16">Switch Disk Side</span></p>
<p>Switches Sides of a FDS disk. (See <a class="rvts18" href="FamicomDiskSytem.html">Famicom Disk System</a>)</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts16">Insert Coin</span></p>
<p>Emulates the inserting of a coin in an arcade-style game.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts33">Emulation Speed Sub Menu</span></p>
<p><br></p>
<p><br/></p>
<p><span class="rvts16">Speed Up</span></p>
<p>Speeds up emulation (emulation speed ranges from 1% to 6400%)</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts16">Slow Down</span></p>
<p>Slows down emulation</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts16">Slowest Speed</span></p>
<p>Sets emulation to 1% speed</p>
<p><span class="rvts16"><br></span></p>
<p><span class="rvts16"><br/></span></p>
<p><span class="rvts16">Normal Speed</span></p>
<p>Sets emulation speed to 100%</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts16">Turbo</span></p>
<p>Toggles turbo mode. &nbsp; In turbo mode, emulation is set its fastest settings.</p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com">Free CHM Help documentation generator</a></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour/create-ebooks-for-amazon-kindle">Full featured Kindle eBooks generator</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>NES Processing</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -53,17 +53,17 @@
<div id="topic_content">
<p><span class="rvts17">NES Processing</span></p>
<p><br></p>
<p><br/></p>
<p>Includes Technical Specifications for the emulation of the NES CPU (6502) and the NES PPU (2C02).</p>
<p><br></p>
<p><br/></p>
<p><a class="rvts18" href="6502CPU.html">CPU</a></p>
<p><br></p>
<p><br/></p>
<p><a class="rvts18" href="PPU.html">PPU</a></p>
<p><br></p>
<p><br/></p>
<p><a class="rvts18" href="NESScrolling1.html">NES Scrolling part 1</a></p>
<p><br></p>
<p><br/></p>
<p><a class="rvts18" href="NESScrolling2.html">NES Scrolling part 2 </a></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour/iphone-website-generation">Free iPhone documentation generator</a></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour">Easily create HTML Help documents</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>NES RAM (Mapping/Finding Values)</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -53,88 +53,88 @@
<div id="topic_content">
<p><span class="rvts17">NES Mapping</span></p>
<p><br></p>
<p><br/></p>
<p>This guide gives a map of the addresses in the NES cpu and explains each portion in detail. &nbsp;</p>
<p><br></p>
<p><br/></p>
<p>It also provides information for the basic layout of ram values in typical NES games. &nbsp;This info can be used to quickly map and find useful values in the game's ram.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts12">Contents</span></p>
<p><br></p>
<p><br/></p>
<p><span class="rvts42">Memory Map</span></p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;Gives a diagram of the 2A03 CPU memory map .</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts42">2C02 PPU memory map</span></p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;Gives more detailed info about each section of the Memory map diagram</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts42">Game Ram Details</span></p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;On board RAM Map ($000-$07FF) Map (gives specific info on the how NES games typically layout their ram values)</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts42">Online Resources</span></p>
<p><a class="rvts18" href="http://en.wikibooks.org/wiki/NES_Programming">NES Programming - Wikipedia</a></p>
<p><a class="rvts18" href="http://everything2.com/e2node/NES%2520memory%2520map">NES Memory Map</a></p>
<p><br></p>
<p><span class="rvts12"><br></span></p>
<p><br/></p>
<p><span class="rvts12"><br/></span></p>
<p><span class="rvts12">Memory Map </span><span class="rvts10">(NES RAM/ROM)</span></p>
<p><br></p>
<p><br/></p>
<p>2A03 CPU memory map</p>
<p>2A03 CPU is a 6502-compatible CPU without the decimal mode (CLD and SED do nothing). It has an on-die sound generator, very limited DMA capability, and an input device controller that can be accessed through the 2A03 registers.</p>
<p><br></p>
<p><br/></p>
<p> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</p>
<p><span class="rvts36">6502 CPU Memory Map &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span></p>
<p>Address Range &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Size in bytes &nbsp; &nbsp; &nbsp; &nbsp;Notes (Page size = 256bytes)</p>
<p><span class="rvts15">(Hexadecimal)</span><span class="rvts15"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts15"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts15"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts15"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts15"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span></p>
<p><br></p>
<p><br/></p>
<p>$0000 - $07FF &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;2048 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Game Ram</p>
<p><br></p>
<p><br/></p>
<p>($0000 - $00FF) &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;256 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Zero Page - Special Zero Page addressing modes give faster memory read/write access</p>
<p>($0100 - $01FF) &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;256 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Stack memory</p>
<p>($0200 - $07FF) &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;1536 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;RAM</p>
<p><span class="rvts15"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span></p>
<p><br></p>
<p><br/></p>
<p>$0800 - $0FFF &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;2048 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Mirror of $0000-$07FF &nbsp; &nbsp; &nbsp; &nbsp;</p>
<p><br></p>
<p><br/></p>
<p>($0800 - $08FF) &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;256 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Zero Page</p>
<p>($0900 - $09FF) &nbsp; &nbsp; &nbsp; &nbsp;256 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Stack</p>
<p>($0A00 - $0FFF) &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;1024 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Ram</p>
<p><span class="rvts15"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span></p>
<p><br></p>
<p><br/></p>
<p>$1000 - $17FF &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;2048 bytes &nbsp; &nbsp; &nbsp; &nbsp;Mirror of $0000-$07FF</p>
<p><br></p>
<p><br/></p>
<p>($1000 - $10FF) &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;256 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Zero Page</p>
<p>$1100 - $11FF &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;256 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Stack</p>
<p>$1200 - $17FF &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;1024 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;RAM</p>
<p><span class="rvts15"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span></p>
<p><br></p>
<p><br/></p>
<p>$1800 - $1FFF &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;2048 bytes &nbsp; &nbsp; &nbsp; &nbsp;Mirror of $0000-$07FF &nbsp; &nbsp; &nbsp; &nbsp;</p>
<p><br></p>
<p><br/></p>
<p>($1800 - $18FF) &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;256 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Zero Page</p>
<p>($1900 - $19FF) &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;256 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Stack</p>
<p>($1A00 - $1FFF) &nbsp; &nbsp; &nbsp; &nbsp;1024 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;RAM</p>
<p><span class="rvts15"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span></p>
<p><br></p>
<p><br/></p>
<p>$2000 - $2007 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;8 bytes &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Input / Output registers</p>
<p>$2008 - $3FFF &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;8184 bytes &nbsp; &nbsp; &nbsp; &nbsp;Mirror of $2000-$2007 (mulitple times)</p>
<p><span class="rvts15"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span></p>
<p><br></p>
<p><br/></p>
<p>$4000 - $401F &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;32 bytes &nbsp; &nbsp; &nbsp; &nbsp;Input / Output registers</p>
<p>$4020 - $5FFF &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;8160 bytes &nbsp; &nbsp; &nbsp; &nbsp;Expansion ROM - Used with Nintendo's MMC5 to expand the capabilities of VRAM.</p>
<p><span class="rvts15"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span></p>
<p><br></p>
<p><br/></p>
<p>$6000 - $7FFF &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;8192 bytes &nbsp; &nbsp; &nbsp; &nbsp;SRAM - Save Ram used to save data between game plays.</p>
<p><span class="rvts15"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span></p>
<p><br></p>
<p><br/></p>
<p>$8000 - $BFFF &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;16384 bytes &nbsp; &nbsp; &nbsp; &nbsp;PRG-ROM lower bank - executable code</p>
<p>$C000 - $FFFF &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;16384 bytes &nbsp; &nbsp; &nbsp; &nbsp;PRG-ROM upper bank - executable code</p>
<p>$FFFA - $FFFB &nbsp; &nbsp; &nbsp; &nbsp;2 bytes &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Address of Non Maskable Interrupt (NMI) handler routine</p>
<p>$FFFC - $FFFD &nbsp; &nbsp; &nbsp; &nbsp;2 bytes &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Address of Power on reset handler routine</p>
<p>$FFFE - $FFFF &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;2 bytes &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Address of Break (BRK instruction) handler routine</p>
<p><span class="rvts15"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span></p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts12">2C02 PPU memory map</span></p>
<p><br></p>
<p><br/></p>
<p>2C02 PPU is a character generator with sprites, designed by Nintendo specifically for the NES.</p>
<p><br></p>
<p><br/></p>
<p> &nbsp; &nbsp; __________________________________________</p>
<p>0000| Pattern table 0 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;|</p>
<p> &nbsp; &nbsp;|__________________________________________|</p>
@ -154,23 +154,23 @@
<p> &nbsp; &nbsp;|__________________________________________|</p>
<p>3f20| Mirrors of $3f00-$3f1f &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |</p>
<p> &nbsp; &nbsp;|__________________________________________|</p>
<p><br></p>
<p><br/></p>
<p>The NES PPU has enough RAM for two nametables (0 and 3); it brings some PPU nametable address lines to the cart edge so that the cart can decide whether to map 0 onto 2 and 1 onto 3 (vertical mirroring as in Super Mario Brothers and Contra) or 0 onto 1 and 2 onto 3 (horizontal mirroring as in Kid Icarus and Ikari), all screens to either 0 or 3 (as in many Rare games such as Battletoads and Jeopardy!), or all screens to RAM on the cartridge (as in Gauntlet). Split-screen games that scroll in all four directions (such as Super Mario Brothers 3 and Kirby's Adventure) often use vertical or one-screen mirroring (with a small amount of screen corruption at the sides due to tiles wrapping around the sides) and stick the status bar in some random unused area of the screen. </p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts12">Game RAM Details</span></p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;Mapping RAM/Finding Ram</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;Written by: adelikat</p>
<p><br></p>
<p><br/></p>
<p>This guide is written specifically for finding useful values for TAS <a class="rvts18" href="MovieRecording.html">movie making</a>. &nbsp;</p>
<p>It does not tell you how to use specific tools to find values. &nbsp;For that refer to <a class="rvts18" href="HexEditor.html">Hex editor</a>, <a class="rvts18" href="CheatSearch.html">Cheat Search</a>, and <span class="rvts18">RAM filter</span>.</p>
<p><br></p>
<p><br/></p>
<p>Most games use the basic on board ram. &nbsp;The address range of this ram is $0000-$07FF. &nbsp;This translates to 2048 possible ram values.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts42">Pages</span></p>
<p><br></p>
<p><br/></p>
<p>This ram is broken down into 8 pages. &nbsp;A "page" is a block of 256 ram values.</p>
<p><br></p>
<p><br/></p>
<p>I will refer to these values as such:</p>
<p>Block 0 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;$00xx &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;($0000-$00FF)</p>
<p>Block 1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;$01xx &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;($0100-$01FF)</p>
@ -180,53 +180,53 @@
<p>Block 5 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;$05xx &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;($0500-$05FF)</p>
<p>Block 6 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;$06xx &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;($0600-$06FF)</p>
<p>Block 7 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;$07xx &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;($0700-$07FF)</p>
<p><br></p>
<p><br/></p>
<p>Each block will be organized will similar data. &nbsp;For instance, all sprite data will be in the same block. &nbsp;Enemy/Player statistics (energy, coordinates, speed, etc.) will be in another. &nbsp;For instance, if you find the main character's HP and it is located in block 3, you know that the remaining stats for the character are also in that block. &nbsp;This can significantly cut down time when trying to find related values.</p>
<p><br></p>
<p><br/></p>
<p>There are always the following blocks:</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts38">Sprite Data</span><span class="rvts38"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts38"> &nbsp; &nbsp; &nbsp; &nbsp;</span>Block 2</p>
<p><br></p>
<p><br/></p>
<p>I've yet to see map a game that does not use this block solely for sprite data. &nbsp;It will contain the "ID" numbers for all the items currently on the screen. &nbsp;Simply put, this data is precisely the data you see on the screen. &nbsp;For making TAS movies this is not useful data. &nbsp;If you are using cheat search and have narrowed it down your search to a few values, you can immediately discard any $02xx values.</p>
<p><br></p>
<p><br/></p>
<p>In games with a lot of sprite data, I've seen blocks 1 &amp; 3 also reserved for sprite data.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts38">Music &amp; Sound FX</span><span class="rvts38"> &nbsp; &nbsp; &nbsp; &nbsp;</span>Block 1 or 7, generally</p>
<p><br></p>
<p><br/></p>
<p>This one has more deviation, but almost all games reserve an entire block for memory allocated to the game's Music and Sound FX. &nbsp;Again, for TAS purposes these values are not *useful. By finding even 1 of these values, you can eliminate that block from your search possibilities. &nbsp; Finding which block is reserved for music is often quite simple with the <a class="rvts18" href="HexEditor.html">Hex editor</a>. &nbsp;Watching the ram values with the game playing, you can see which addresses "move to the beat". &nbsp;</p>
<p><br></p>
<p><br/></p>
<p>*Actually they can come in handy for "dancing to the beat"</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts38">Player &amp; Enemy Stats</span> &nbsp; &nbsp; &nbsp; &nbsp;Blocks 1,3,4,5 generally (any or all of these)</p>
<p><br></p>
<p><br/></p>
<p>This is your "sweet spot" for movie making, as often you will be wanting to track the players speed or coordinates, enemy energy, or enemy coordinates.</p>
<p><br></p>
<p><br/></p>
<p>These values rarely (if at all) reside outside blocks 1, 3, 4, or 5. &nbsp;This knowledge already reduces your search possibilities in half!</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts42">Rows </span></p>
<p><span class="rvts42"><br></span></p>
<p><span class="rvts42"><br/></span></p>
<p>Each block is broken down into 16 "rows" of addresses. &nbsp;For example, in block 3, the first row is $030x ($0300-$030F).</p>
<p><br></p>
<p><br/></p>
<p>Each row of 16* will contain similar data. &nbsp;For instance all x coordinates will generally be in the same row. &nbsp;So xxx0 might be the main characters x position. &nbsp;xxxx1 would be "enemy 1" (1st enemy loaded onto the screen), and so on.</p>
<p><br></p>
<p><br/></p>
<p>The y coordinates would be in another row, x subpixel values in yet another row, etc.</p>
<p><br></p>
<p><br/></p>
<p>*Super Mario Bros. 2 (U) is a rare example that uses rows of 10</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts42">Columns</span></p>
<p><br></p>
<p><br/></p>
<p>A column would be all the values of a block that share the same last digit. &nbsp;So a column would be 16 addresses such as $0300, $0310, $0320, etc.</p>
<p><br></p>
<p><br/></p>
<p>For enemy/player stats, columns usually refer to the same player or enemy.</p>
<p><br></p>
<p><br/></p>
<p>So for example, if a player's energy was stored in $0300. &nbsp;The remaining row will be other player/enemy's energy. &nbsp;</p>
<p><br></p>
<p><br/></p>
<p>If the next row ($031x) is x positions. &nbsp;$0310 would be the player's x position. &nbsp;The remaining positions of that row would correspond to the other player/enemy x positions in line with the hp values of the previous row.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts42">Example</span></p>
<p><br></p>
<p><br/></p>
<p>These distinctions are easier to see in a visual example. &nbsp;This is the enemy/player stats as they are mapped in the game <span class="rvts30">Teenage Mutant Ninja Turtles</span>.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts38">Block 4</span></p>
<p><span class="rvts61"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts61"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts61"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;P &nbsp;W1 W2 W3 E1 E2 E3 E4 E5 E6 E7 E8 X &nbsp;X &nbsp;X &nbsp;X &nbsp;</span></p>
<p><span class="rvts29">Sprite ID: &nbsp; &nbsp; &nbsp; &nbsp;040x: 09 00 00 00 00 9E 9E 9E 9E 00 00 00 00 00 00 00</span></p>
@ -245,22 +245,22 @@
<p><span class="rvts29">Not used: &nbsp; &nbsp; &nbsp; &nbsp; 04dx: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00</span></p>
<p><span class="rvts29">X pix speed: &nbsp; &nbsp; &nbsp;04ex: 00 00 00 00 00 01 01 FE FE 00 00 00 00 00 00 00</span></p>
<p><span class="rvts29">X subpix speed: &nbsp; 04fx: 00 00 00 00 00 60 60 A0 A0 00 00 00 00 00 00 00</span></p>
<p><br></p>
<p><br/></p>
<p>P = current turtle (player)</p>
<p>W = weapon (up to 3 on the screen at one time)</p>
<p>E = enemy (up to 8 on the screen at one time)</p>
<p>X = no use</p>
<p><br></p>
<p><br/></p>
<p>E1 = "Enemy slot 1" which will be the first enemy on the screen loaded into memory. &nbsp;The 2nd will be placed in "Enemy slot 2". &nbsp;When enemy 1 is removed from memory (killed or goes off screen), the next enemy will be loaded into that slot. &nbsp;Enemy's always take the lowest available slot when loaded. &nbsp;Note: usually enemy slots are in reverse order. &nbsp;So the first addresses is usually the last enemy slot loaded into memory. &nbsp;TMNT is an exception.</p>
<p><br></p>
<p><br/></p>
<p>All object (player, weapon, enemy) characteristics reside in block 4.</p>
<p>Each row is a different characteristic of each object on the screen (040x refers to a sprite ID of an object)</p>
<p>Each column corresponds to a specific object on the screen. &nbsp;(All 04x0 's refer to the player).</p>
<p><br></p>
<p><br/></p>
<p>See also, <a class="rvts18" href="MemoryWatch.html">Memory Watch</a>, <a class="rvts18" href="HexEditor.html">Hex Editor</a>,<a class="rvts18" href="CheatSearch.html"> Cheat Search</a>, <span class="rvts18">Ram Filter</span>, <a class="rvts18" href="MovieRecording.html">Movie Making</a>, <a class="rvts18" href="ToolAssistedSpeedruns.html">Tool Assisted Speedruns</a></p>
<p><br></p>
<p><br></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour/iphone-website-generation">Create iPhone web-based documentation</a></p>
<p><br/></p>
<p><br/></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com">Free CHM Help documentation generator</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>NES Scrolling 1</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -57,29 +57,29 @@
<p>From: loopy &lt;zxcvzxcv@netzero.net&gt;</p>
<p>Reply-To: nesdev@onelist.com</p>
<p>To: nesdev@onelist.com</p>
<p><br></p>
<p><br/></p>
<p>From: loopy &lt;zxcvzxcv@netzero.net&gt;</p>
<p><br></p>
<p><br/></p>
<p>---------</p>
<p>the current information on background scrolling is sufficient for most games;</p>
<p>however, there are a few that require a more complete understanding.</p>
<p><br></p>
<p><br/></p>
<p>here are the related registers:</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;(v) vram address, a.k.a. 2006 which we all know and love. &nbsp;(16 bits)</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;(t) another temp vram address (16 bits)</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (you can really call them 15 bits, the last isn't used)</p>
<p> &nbsp; &nbsp; &nbsp; (x) tile X offset (3 bits)</p>
<p><br></p>
<p><br/></p>
<p>the ppu uses the vram address for both reading/writing to vram thru 2007,</p>
<p>and for fetching nametable data to draw the background. &nbsp;as it's drawing the</p>
<p>background, it updates the address to point to the nametable data currently</p>
<p>being drawn. &nbsp;bits 0-11 hold the nametable address (-$2000). &nbsp;bits 12-14 are</p>
<p>the tile Y offset.</p>
<p><br></p>
<p><br/></p>
<p>---------</p>
<p>stuff that affects register contents:</p>
<p>(sorry for the shorthand logic but i think it's easier to see this way)</p>
<p><br></p>
<p><br/></p>
<p>2000 write:</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;t:0000110000000000=d:00000011</p>
<p>2005 first write:</p>
@ -98,16 +98,16 @@
<p> &nbsp; &nbsp; &nbsp; &nbsp;v:0000010000011111=t:0000010000011111</p>
<p>frame start (line 0) (if background and sprites are enabled):</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;v=t</p>
<p><br></p>
<p><br/></p>
<p>note! &nbsp;2005 and 2006 share the toggle that selects between first/second</p>
<p>writes. &nbsp;reading 2002 will clear it.</p>
<p><br></p>
<p><br/></p>
<p>note! &nbsp;all of this info agrees with the tests i've run on a real nes. &nbsp;BUT</p>
<p>if there's something you don't agree with, please let me know so i can verify</p>
<p>it.</p>
<p><br></p>
<p><br></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour">Easily create CHM Help documents</a></p>
<p><br/></p>
<p><br/></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com">Free EPub and documentation generator</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>NES Scrolling 2</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -51,21 +51,21 @@
<div id="topic_content">
<p>nes scrolling</p>
<p><br></p>
<p><br/></p>
<p>Date: Tue, 13 Apr 1999 17:48:54 -0600</p>
<p>From: loopy &lt;zxcvzxcv@netzero.net&gt;</p>
<p>Reply-To: nesdev@onelist.com</p>
<p>To: nesdev@onelist.com</p>
<p><br></p>
<p><br/></p>
<p>From: loopy &lt;zxcvzxcv@netzero.net&gt;</p>
<p><br></p>
<p><br/></p>
<p>(more notes on ppu logic)</p>
<p><br></p>
<p><br/></p>
<p>you can think of bits 0,1,2,3,4 of the vram address as the "x scroll"(*8)</p>
<p>that the ppu increments as it draws. &nbsp;as it wraps from 31 to 0, bit 10 is</p>
<p>switched. &nbsp;you should see how this causes horizontal wrapping between name</p>
<p>tables (0,1) and (2,3).</p>
<p><br></p>
<p><br/></p>
<p>you can think of bits 5,6,7,8,9 as the "y scroll"(*8). &nbsp;this functions</p>
<p>slightly different from the X. &nbsp;it wraps to 0 and bit 11 is switched when</p>
<p>it's incremented from _29_ instead of 31. &nbsp;there are some odd side effects</p>
@ -74,7 +74,7 @@
<p>used as name table data. &nbsp;the "y scroll" still wraps to 0 from 31, but</p>
<p>without switching bit 11. &nbsp;this explains why writing 240+ to 'Y' in 2005</p>
<p>appeared as a negative scroll value.</p>
<p><br></p>
<p><br/></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/help-authoring-tool">Free help authoring tool</a></p>
</div>

View File

@ -3,7 +3,7 @@
<head>
<title>NES Sound</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -56,12 +56,12 @@
<p>*2A03 sound channel hardware documentation*</p>
<p>*******************************************</p>
<p>Brad Taylor (big_time_software@hotmail.com)</p>
<p><br></p>
<p><br/></p>
<p> 4th release: &nbsp; &nbsp; &nbsp; &nbsp;February 19th, 2K3</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p> All results were obtained by studying prior information available (from nestech 1.00, and postings on NESDev from miscellanious people), and through a series of experiments conducted by me. Results acquired by individuals prior to my reverse-engineering have been double checked, and final results have been confirmed. Credit is due to those individual(s) who contributed miscellanious information in regards to NES sound channel hardware. Such individuals are:</p>
<p><br></p>
<p><br/></p>
<p> Goroh</p>
<p> Memblers</p>
<p> FluBBa</p>
@ -69,162 +69,162 @@
<p> Chibi-Tech</p>
<p> Quietust</p>
<p> SnowBro</p>
<p><br></p>
<p><br/></p>
<p> Kentaro Ishihara (Ki) is responsible for posting (on the NESdev mailing list) differrences in the 2 square wave channels, including the operation of 2A03 hardware publically undocumented (until now) such as the frame IRQ counter, and it's ties with sound hardware. Goroh had originally discovered some of this information, and Ki confirmed it.</p>
<p><br></p>
<p><br/></p>
<p> A special thanks goes out to Matthew Conte, for his expertise on pseudo-random number generation (amoung other things), which allowed for the full reverse engineering of the NES's noise channel to take place. Without his help, I would still be trying to find a needle in a haystack, as far as the noise's method of pseudo-random number generation goes. Additionally, his previous findings / reverse engineering work on the NES's sound hardware really got the ball of NES sound emulation rolling. If it weren't for Matt's original work, this document wouldn't exist.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p>****************</p>
<p>* Introduction *</p>
<p>****************</p>
<p> The 2A03 (NES's integrated CPU) has 4 internal channels to it that have the ability to generate semi-analog sound, for musical playback purposes. These channels are 2 square wave channels, one triangle wave channel, and a noise generation channel. This document will go into full detail on every aspect of the operation and timing of the mentioned sound channels.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p>*******************</p>
<p>* Channel details *</p>
<p>*******************</p>
<p> Each channel has different characteristics to it that make up it's operation.</p>
<p><br></p>
<p><br/></p>
<p> The square channel(s) have the ability to generate a square wave frequency in the range of 54.6 Hz to 12.4 KHz. It's key features are frequency sweep abilities, and output duty cycle adjustment.</p>
<p><br></p>
<p><br/></p>
<p> The triangle wave channel has the ability to generate an output triangle wave with a resolution of 4-bits (16 steps), in the range of 27.3 Hz to 55.9 KHz. The key features this channel has is it's analog triangle wave output, and it's linear counter, which can be set to automatically disable the channel's sound after a certain period of time has gone by.</p>
<p><br></p>
<p><br/></p>
<p> The noise channel is used for producing random frequencys, which results in a "noisey" sounding output. Output frequencys can range anywhere from 29.3 Hz to 447 KHz. It's key feature is it's pseudo- random number generator, which generates the random output frequencys heard by the channel.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p>*****************</p>
<p>* Frame counter *</p>
<p>*****************</p>
<p> The 2A03 has an internal frame counter. The purpose of it is to generate the various low frequency signals (60, 120, 240 Hz, and 48, 96, 192 Hz) required to clock several of the sound hardware's counters. It also has the ability to generate IRQ's.</p>
<p><br></p>
<p><br/></p>
<p> The smallest unit of timing the frame counter operates around is 240Hz; all other frequencies are generated by multiples of this base frequency. A clock divider of 14915 (clocked at twice the CPU speed) is used to get 240Hz (this was the actual measured ratio).</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p>+---------------+</p>
<p>|$4017 operation|</p>
<p>+---------------+</p>
<p> Writes to register $4017 control operation of both the clock divider, and the frame counter.</p>
<p><br></p>
<p><br/></p>
<p> - Any write to $4017 resets both the frame counter, and the clock divider. Sometimes, games will write to this register in order to synchronize the sound hardware's internal timing, to the sound routine's timing (usually tied into the NMI code). The frame IRQ is slightly longer than the PPU's, so you can see why games would desire this syncronization.</p>
<p><br></p>
<p><br/></p>
<p> - bit 7 of $4017 controls the frame counter's divide rate. Every time the counter cycles (reaches terminal count (0)), a frame IRQ will be generated, if enabled by clearing bit 6 of $4017. $4015.6 holds the status of the frame counter IRQ; it will be set if the frame counter is responsible for the interrupt.</p>
<p><br></p>
<p><br/></p>
<p>$4017.7 &nbsp;divider &nbsp;frame IRQ freq.</p>
<p>------- &nbsp;------- &nbsp;---------------</p>
<p>0 &nbsp; &nbsp; &nbsp; &nbsp;4 &nbsp; &nbsp; &nbsp; &nbsp;60</p>
<p>1 &nbsp; &nbsp; &nbsp; &nbsp;5 &nbsp; &nbsp; &nbsp; &nbsp;48</p>
<p><br></p>
<p><br/></p>
<p> On 2A03 reset, both bits of $4017 (6 &amp; 7) will be cleared, enabling frame IRQ's off the hop. The reason why the existence of frame IRQ's are generally unknown is because the 6502's maskable interrupt is disabled on reset, and this blocks out the frame IRQ's. Most games don't use any IRQ-generating hardware in general, therefore they don't bother enabling maskable interrupts.</p>
<p><br></p>
<p><br/></p>
<p> Note that the IRQ line will be held down by the frame counter until it is acknowledged (by reading $4015). Before this, the 6502 will generate an IRQ *every* time interrupts are enabled (either by CLI or RTI), since the IRQ design on the 6502 is level-triggered, and not edge. If you've written a program that does not read $4015 in the IRQ handler, and you execute CLI, the processor will immediately go into a infinite IRQ call-return loop.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p>+-----------------------+</p>
<p>|Frame counter operation|</p>
<p>+-----------------------+</p>
<p> Depending on the status of $4017.7, the frame counter will follow 2 different count sequences. These sequences determine when sound hardware counters will be clocked. The sequences are initialized immediately following any write to $4017.</p>
<p><br></p>
<p><br/></p>
<p>$4017.7 &nbsp;sequence</p>
<p>------- &nbsp;--------</p>
<p>0 &nbsp; &nbsp; &nbsp; &nbsp;4, 0,1,2,3, 0,1,2,3,..., etc.</p>
<p>1 &nbsp; &nbsp; &nbsp; &nbsp;0,1,2,3,4, 0,1,2,3,4,..., etc.</p>
<p><br></p>
<p><br/></p>
<p> During count sequences 0..3, the linear (triangle) and envelope decay (square &amp; noise) counters recieve a clock for each count. This means that both these counters are clocked once immediately after $4017.7 is written with a value of 1.</p>
<p><br></p>
<p><br/></p>
<p> Count sequences 1 &amp; 3 clock (update) the frequency sweep (square), and length (all channels) counters. Even though the length counter's smallest unit of time counting is a frame, it seems that it is actually being clocked twice per frame. That said, you can consider the length counters to contain an extra stage to divide this clock signal by 2.</p>
<p><br></p>
<p><br/></p>
<p> No aforementioned sound hardware counters are clocked on count sequence #4. You should now see how this causes the 96, and 192 Hz signals to be generated when $4017.7=1.</p>
<p><br></p>
<p><br/></p>
<p> The rest of the document will describe the operation of the sound channels using the $4017.7=0 frequencies (60, 120, and 240 Hz). For $4017.7=1 operation, replace those frequencies with 48, 96, and 192 Hz (respectively).</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p>************************</p>
<p>* Sound hardware delay *</p>
<p>************************</p>
<p> After resetting the 2A03, the first time any sound channel(s) length counter contains a non-zero value (channel is enabled), there will be a 2048 CPU clock cycle delay before any of the sound hardware is clocked. After the 2K clock cycles go by, the NES sound hardware will be clocked normally. This phenomenon only occurs prior to a system reset, and only occurs during the first 2048 CPU clocks after the activation of any of the 4 basic sound channels.</p>
<p><br></p>
<p><br/></p>
<p> The information in regards to this delay is only provided to keep this document accurate with all information that is currently known about the 2A03's sound hardware. I haven't done much tests on the behaviour of this delay (mainly because I don't care, as I view it as a inconvenience anyway), so this information should be taken with a grain of salt.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p>************************</p>
<p>* Register Assignments *</p>
<p>************************</p>
<p> The sound hardware internal to the 2A03 has been designated these special memory addresses in the CPU's memory map.</p>
<p><br></p>
<p><br/></p>
<p>$4000-$4003 &nbsp; &nbsp; &nbsp; &nbsp;Square wave 1</p>
<p>$4004-$4007 &nbsp; &nbsp; &nbsp; &nbsp;Square wave 2 (identical to the first, except for upward frequency sweeps (see "sweep unit" section))</p>
<p>$4008-$400B &nbsp; &nbsp; &nbsp; &nbsp;Triangle</p>
<p>$400C-$400F &nbsp; &nbsp; &nbsp; &nbsp;Noise</p>
<p>$4015 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Channel enable / length/frame counter status</p>
<p>$4017 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;frame counter control</p>
<p><br></p>
<p><br/></p>
<p> Note that $4015 (and $4017, but is unrelated to sound hardware) are the only R/W registers. All others are write only (attempt to read them will most likely return the last byte on the bus (usually 040H), due to heavy capacitance on the NES's data bus). Reading a "write only" register, will have no effect on the specific register, or channel.</p>
<p><br></p>
<p><br/></p>
<p> Every sound channel has 4 registers affiliated with it. The description of the register sets are as follows:</p>
<p><br></p>
<p><br/></p>
<p>+----------------+</p>
<p>| Register set 1 |</p>
<p>+----------------+</p>
<p><br></p>
<p><br/></p>
<p>$4000(sq1)/$4004(sq2)/$400C(noise) bits</p>
<p>---------------------------------------</p>
<p>0-3 &nbsp; &nbsp; &nbsp; &nbsp;volume / envelope decay rate</p>
<p>4 &nbsp; &nbsp; &nbsp; &nbsp;envelope decay disable</p>
<p>5 &nbsp; &nbsp; &nbsp; &nbsp;length counter clock disable / envelope decay looping enable</p>
<p>6-7 &nbsp; &nbsp; &nbsp; &nbsp;duty cycle type (unused on noise channel)</p>
<p><br></p>
<p><br/></p>
<p>$4008(tri) bits</p>
<p>---------------</p>
<p>0-6 &nbsp; &nbsp; &nbsp; &nbsp;linear counter load register</p>
<p>7 &nbsp; &nbsp; &nbsp; &nbsp;length counter clock disable / linear counter start</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p>+----------------+</p>
<p>| Register set 2 |</p>
<p>+----------------+</p>
<p><br></p>
<p><br/></p>
<p>$4001(sq1)/$4005(sq2) bits</p>
<p>--------------------------</p>
<p>0-2 &nbsp; &nbsp; &nbsp; &nbsp;right shift amount</p>
<p>3 &nbsp; &nbsp; &nbsp; &nbsp;decrease / increase (1/0) wavelength</p>
<p>4-6 &nbsp; &nbsp; &nbsp; &nbsp;sweep update rate</p>
<p>7 &nbsp; &nbsp; &nbsp; &nbsp;sweep enable</p>
<p><br></p>
<p><br/></p>
<p>$4009(tri)/$400D(noise) bits</p>
<p>----------------------------</p>
<p>0-7 &nbsp; &nbsp; &nbsp; &nbsp;unused</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p>+----------------+</p>
<p>| Register set 3 |</p>
<p>+----------------+</p>
<p><br></p>
<p><br/></p>
<p>$4002(sq1)/$4006(sq2)/$400A(Tri) bits</p>
<p>-------------------------------------</p>
<p>0-7 &nbsp; &nbsp; &nbsp; &nbsp;8 LSB of wavelength</p>
<p><br></p>
<p><br/></p>
<p>$400E(noise) bits</p>
<p>-----------------</p>
<p>0-3 &nbsp; &nbsp; &nbsp; &nbsp;playback sample rate</p>
<p>4-6 &nbsp; &nbsp; &nbsp; &nbsp;unused</p>
<p>7 &nbsp; &nbsp; &nbsp; &nbsp;random number type generation</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p>+----------------+</p>
<p>| Register set 4 |</p>
<p>+----------------+</p>
<p><br></p>
<p><br/></p>
<p>$4003(sq1)/$4007(sq2)/$400B(tri)/$400F(noise) bits</p>
<p>--------------------------------------------------</p>
<p>0-2 &nbsp; &nbsp; &nbsp; &nbsp;3 MS bits of wavelength (unused on noise channel)</p>
<p>3-7 &nbsp; &nbsp; &nbsp; &nbsp;length counter load register</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p>+--------------------------------+</p>
<p>| length counter status register |</p>
<p>+--------------------------------+</p>
<p><br></p>
<p><br/></p>
<p>$4015(read)</p>
<p>-----------</p>
<p>0 &nbsp; &nbsp; &nbsp; &nbsp;square wave channel 1</p>
@ -234,12 +234,12 @@
<p>4 &nbsp; &nbsp; &nbsp; &nbsp;DMC (see "DMC.TXT" for details)</p>
<p>5-6 &nbsp; &nbsp; &nbsp; &nbsp;unused</p>
<p>7 &nbsp; &nbsp; &nbsp; &nbsp;IRQ status of DMC (see "DMC.TXT" for details)</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p>+-------------------------+</p>
<p>| channel enable register |</p>
<p>+-------------------------+</p>
<p><br></p>
<p><br/></p>
<p>$4015(write)</p>
<p>------------</p>
<p>0 &nbsp; &nbsp; &nbsp; &nbsp;square wave channel 1</p>
@ -248,13 +248,13 @@
<p>3 &nbsp; &nbsp; &nbsp; &nbsp;noise channel</p>
<p>4 &nbsp; &nbsp; &nbsp; &nbsp;DMC channel (see "DMC.TXT" for details)</p>
<p>5-7 &nbsp; &nbsp; &nbsp; &nbsp;unused</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p>************************</p>
<p>* Channel architecture *</p>
<p>************************</p>
<p> This section will describe the internal components making up each individual channel. Each component will then be described in full detail.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts57">Device</span><span class="rvts57"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts57"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts57"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts57"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts57"> Triangle Noise &nbsp;Square</span></p>
<p><span class="rvts57">------</span><span class="rvts57"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts57"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts57"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts57"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts57"> -------- ------ ------</span></p>
<p><span class="rvts57">triangle step generator</span><span class="rvts57"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts57"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts57"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts57">X</span></p>
@ -267,45 +267,45 @@
<p><span class="rvts57">duty cycle generator</span><span class="rvts57"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts57"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts57"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts57"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts57"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts57"> &nbsp;X</span></p>
<p><span class="rvts57">wavelength converter</span><span class="rvts57"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts57"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts57"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts57"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts57"> X</span></p>
<p><span class="rvts57">random number generator</span><span class="rvts57"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts57"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts57"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts57"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts57"> X</span></p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p>+-------------------------+</p>
<p>| Triangle step generator |</p>
<p>+-------------------------+</p>
<p> This is a 5-bit, single direction counter, and it is only used in the triangle channel. Each of the 4 LSB outputs of the counter lead to one input on a corresponding mutually exclusive XNOR gate. The 4 XNOR gates have been strobed together, which results in the inverted representation of the 4 LSB of the counter appearing on the outputs of the gates when the strobe is 0, and a non-inverting action taking place when the strobe is 1. The strobe is naturally connected to the MSB of the counter, which effectively produces on the output of the XNOR gates a count sequence which reflects the scenario of a near- ideal triangle step generator (D,E,F,F,E,D,...,2,1,0,0,1,2,...). At this point, the outputs of the XNOR gates will be fed into the input of a 4-bit DAC.</p>
<p><br></p>
<p><br/></p>
<p> This 5-bit counter will be halted whenever the Triangle channel's length or linear counter contains a count of 0. This results in a "latching" behaviour; the counter will NOT be reset to any definite state.</p>
<p><br></p>
<p><br/></p>
<p> On system reset, this counter is loaded with 0.</p>
<p><br></p>
<p><br/></p>
<p> The counter's clock input is connected directly to the terminal count output pin of the 11-bit programmable timer in the triangle channel. As a result of the 5-bit triangle step generator, the output triangle wave frequency will be 32 times less than the frequency of the triangle channel's programmable timer is set to generate.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p>+----------------+</p>
<p>| Linear counter |</p>
<p>+----------------+</p>
<p> The linear counter is only found in the triangle channel. It is a 7-bit presettable down counter, with a decoded output condition of 0 available (not exactly the same as terminal count). Here's the bit assignments:</p>
<p><br></p>
<p><br/></p>
<p>$4008 bits</p>
<p>----------</p>
<p>0-6 &nbsp; &nbsp; &nbsp; &nbsp;bits 0-6 of the linear counter load register (NOT the linear counter itself)</p>
<p>7 &nbsp; &nbsp; &nbsp; &nbsp;linear counter start</p>
<p><br></p>
<p><br/></p>
<p> The counter is clocked at 240 Hz (1/4 framerate), and the calculated length in frames is 0.25*N, where N is the 7-bit loaded value. The counter is always being clocked, except when 0 appears on the output of the counter. At this point, the linear counter &amp; triangle step counter clocks signals are disabled, which results in both counters latching their current state (the linear counter will stay at 0, and the triangle step counter will stop, and the channel will be silenced due to this).</p>
<p><br></p>
<p><br/></p>
<p> The linear counter has 2 modes: load, and count. When the linear counter is in load mode, it essentially becomes transparent (i.e. whatever value is currently in, or being written to $4008, will appear on the output of the counter). Because of this, no count action can occur in load mode. When the mode changes from load to count, the counter will now latch the value currently in it, and start counting down from there. In the count mode, the current value of $4008 is ignored by the counter (but still retained in $4008). Described below is how the mode of the linear counter is set:</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p>Writes to $400B</p>
<p>---------------</p>
<p>cur &nbsp; &nbsp; &nbsp; &nbsp;mode</p>
<p>--- &nbsp; &nbsp; &nbsp; &nbsp;----</p>
<p>1 &nbsp; &nbsp; &nbsp; &nbsp;load</p>
<p>0 &nbsp; &nbsp; &nbsp; &nbsp;load (on next linear counter clock), count</p>
<p><br></p>
<p><br/></p>
<p> Cur is the current state of the MSB of $4008.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p>Writes to $4008</p>
<p>---------------</p>
<p>old &nbsp; &nbsp; &nbsp; &nbsp;new &nbsp; &nbsp; &nbsp; &nbsp;mode</p>
@ -313,57 +313,57 @@
<p>0 &nbsp; &nbsp; &nbsp; &nbsp;X &nbsp; &nbsp; &nbsp; &nbsp;count</p>
<p>1 &nbsp; &nbsp; &nbsp; &nbsp;0 &nbsp; &nbsp; &nbsp; &nbsp;no change (during the CPU write cycle), count</p>
<p>1 &nbsp; &nbsp; &nbsp; &nbsp;1 &nbsp; &nbsp; &nbsp; &nbsp;no change</p>
<p><br></p>
<p><br/></p>
<p> Old and new represent the state(s) of the MSB of $4008. Old is the value being replaced in the MSB of $4008 on the write, and new is the value replacing the old one.</p>
<p><br></p>
<p><br/></p>
<p> "no change" indicates that the mode of the linear counter will not change from the last.</p>
<p><br></p>
<p><br/></p>
<p> Note that writes to $400B when $4008.7=0 only loads the linear counter with the value in $4008 on the next *linear* counter clock (and NOT at the end of the CPU write cycle). This is a correction from older versions of this doc.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p>+--------------------+</p>
<p>| Programmable timer |</p>
<p>+--------------------+</p>
<p> The programmable timer is a 11-bit presettable down counter, and is found in the square, triangle, and noise channel(s). The bit assignments are as follows:</p>
<p><br></p>
<p><br/></p>
<p>$4002(sq1)/$4006(sq2)/$400A(Tri) bits</p>
<p>-------------------------------------</p>
<p>0-7 &nbsp; &nbsp; &nbsp; &nbsp;represent bits 0-7 of the 11-bit wavelength</p>
<p><br></p>
<p><br/></p>
<p>$4003(sq1)/$4007(sq2)/$400B(Tri) bits</p>
<p>-------------------------------------</p>
<p>0-2 &nbsp; &nbsp; &nbsp; &nbsp;represent bits 8-A of the 11-bit wavelength</p>
<p><br></p>
<p><br/></p>
<p> Note that on the noise channel, the 11 bits are not available directly. See the wavelength converter section, for more details.</p>
<p><br></p>
<p><br/></p>
<p> The counter has automatic syncronous reloading upon terminal count (count=0), therefore the counter will count for N+1 (N is the 11-bit loaded value) clock cycles before arriving at terminal count, and reloading. This counter will typically be clocked at the 2A03's internal 6502 speed (1.79 MHz), and produces an output frequency of 1.79 MHz/(N+1). The terminal count's output spike length is typically no longer than half a CPU clock. The TC signal will then be fed to the appropriate device for the particular sound channel (for square, this terminal count spike will lead to the duty cycle generator. For the triangle, the spike will be fed to the triangle step generator. For noise, this signal will go to the random number generator unit).</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p>+----------------+</p>
<p>| Length counter |</p>
<p>+----------------+</p>
<p> The length counter is found in all sound channels. It is essentially a 7-bit down counter, and is conditionally clocked at a frequency of 60 Hz.</p>
<p><br></p>
<p><br/></p>
<p> When the length counter arrives at a count of 0, the counter will be stopped (stay on 0), and the appropriate channel will be silenced.</p>
<p><br></p>
<p><br/></p>
<p> The length counter clock disable bit, found in all the channels, can also be used to halt the count sequence of the length counter for the appropriate channel, by writing a 1 out to it. A 0 condition will permit counting (unless of course, the counter's current count = 0). Location(s) of the length counter clock disable bit:</p>
<p><br></p>
<p><br/></p>
<p>$4000(sq1)/$4004(sq2)/$400C(noise) bits</p>
<p>---------------------------------------</p>
<p>5 &nbsp; &nbsp; &nbsp; &nbsp;length counter clock disable</p>
<p><br></p>
<p><br/></p>
<p>$4008(tri) bits</p>
<p>---------------</p>
<p>7 &nbsp; &nbsp; &nbsp; &nbsp;length counter clock disable</p>
<p><br></p>
<p><br/></p>
<p> To load the length counter with a specified count, a write must be made out to the length register. Location(s) of the length register:</p>
<p><br></p>
<p><br/></p>
<p>$4003(sq1)/$4007(sq2)/$400B(tri)/$400F(noise) bits</p>
<p>--------------------------------------------------</p>
<p>3-7 &nbsp; &nbsp; &nbsp; &nbsp;length</p>
<p><br></p>
<p><br/></p>
<p> The 5-bit length value written, determines what 7-bit value the length counter will start counting from. A conversion table here will show how the values are translated.</p>
<p><br></p>
<p><br/></p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;+-----------------------+</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;| &nbsp; &nbsp; &nbsp; &nbsp;bit3=0 &nbsp; &nbsp; &nbsp; &nbsp;|</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;+-------+---------------+</p>
@ -380,7 +380,7 @@
<p> &nbsp; &nbsp; &nbsp; &nbsp;|6 &nbsp; &nbsp; &nbsp; &nbsp;|07 &nbsp; &nbsp; &nbsp; &nbsp;|08 &nbsp; &nbsp; &nbsp; &nbsp;|</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;|7 &nbsp; &nbsp; &nbsp; &nbsp;|0D &nbsp; &nbsp; &nbsp; &nbsp;|10 &nbsp; &nbsp; &nbsp; &nbsp;|</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;+-------+-------+-------+</p>
<p><br></p>
<p><br/></p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;+---------------+</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;| &nbsp; &nbsp; &nbsp; &nbsp;bit3=1 &nbsp; &nbsp; &nbsp; &nbsp;|</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;+-------+-------+</p>
@ -404,9 +404,9 @@
<p> &nbsp; &nbsp; &nbsp; &nbsp;|E &nbsp; &nbsp; &nbsp; &nbsp;|0E &nbsp; &nbsp; &nbsp; &nbsp;|</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;|F &nbsp; &nbsp; &nbsp; &nbsp;|0F &nbsp; &nbsp; &nbsp; &nbsp;|</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;+-------+-------+</p>
<p><br></p>
<p><br/></p>
<p> The length counter's real-time status for each channel can be attained. A 0 is returned for a zero count status in the length counter (channel's sound is disabled), and 1 for a non-zero status. Here's the bit description of the length counter status register:</p>
<p><br></p>
<p><br/></p>
<p>$4015(read)</p>
<p>-----------</p>
<p>0 &nbsp; &nbsp; &nbsp; &nbsp;length counter status of square wave channel 1</p>
@ -417,11 +417,11 @@
<p>5 &nbsp; &nbsp; &nbsp; &nbsp;unknown</p>
<p>6 &nbsp; &nbsp; &nbsp; &nbsp;frame IRQ status</p>
<p>7 &nbsp; &nbsp; &nbsp; &nbsp;IRQ status of DMC (see "DMC.TXT" for details)</p>
<p><br></p>
<p><br/></p>
<p> Writing a 0 to the channel enable register will force the length counters to always contain a count equal to 0, which renders that specific channel disabled (as if it doesn't exist). Writing a 1 to the channel enable register disables the forced length counter value of 0, but will not change the count itself (it will still be whatever it was prior to the writing of 1).</p>
<p><br></p>
<p><br/></p>
<p> Bit description of the channel enable register:</p>
<p><br></p>
<p><br/></p>
<p>$4015(write)</p>
<p>------------</p>
<p>0 &nbsp; &nbsp; &nbsp; &nbsp;enable square wave channel 1</p>
@ -430,102 +430,102 @@
<p>3 &nbsp; &nbsp; &nbsp; &nbsp;enable noise channel</p>
<p>4 &nbsp; &nbsp; &nbsp; &nbsp;enable DMC channel (see "DMC.TXT" for details)</p>
<p>5-7 &nbsp; &nbsp; &nbsp; &nbsp;unknown</p>
<p><br></p>
<p><br/></p>
<p> Note that all 5 used bits in this register will be set to 0 upon system reset.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p>+-----------+</p>
<p>| 4-bit DAC |</p>
<p>+-----------+</p>
<p> This is just a standard 4-bit DAC with 16 steps of output voltage resolution, and is used by all 4 sound channels. On the 2A03, square wave 1 &amp; 2 are mixed together, and are available via pin 1. Triangle &amp; noise are available on pin 2.</p>
<p><br></p>
<p><br/></p>
<p> These analog outputs require a negative current source, to attain linear symmetry on the various output voltage levels generated by the channel(s) (moreover, to get the sound to be audible). Instead of current sources, the NES uses external 100 ohm pull-down resistors. This results in the output waveforms having some linear asymmetry (i.e., as the desired output voltage increases on a linear scale, the actual outputted voltage increases less and less each step).</p>
<p><br></p>
<p><br/></p>
<p> The side effect of this is that the DMC's 7-bit DAC port ($4011) is able to indirectly control the volume (somewhat) of both triangle &amp; noise channels. While I have not measured the voltage asymmetery, others on the NESdev messageboards have posted their findings. The conclusion is that when $4011 is 0, triangle &amp; noise volume outputs are at maximum. When $4011 = 7F, the triangle &amp; noise channel outputs operate at only 57% total volume.</p>
<p><br></p>
<p><br/></p>
<p> The odd thing is that a few games actually take advantage of this "volume" feature, and write values to $4011 in order to regulate the amplitude of the triangle wave channel's output.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p>+------------------------------+</p>
<p>| Volume / envelope decay unit |</p>
<p>+------------------------------+</p>
<p> The volume / envelope decay hardware is found only in the square wave and noise channels.</p>
<p><br></p>
<p><br/></p>
<p>$4000(sq1)/$4004(sq2)/$400C(noise)</p>
<p>----------------------------------</p>
<p>0-3 &nbsp; &nbsp; &nbsp; &nbsp;volume / envelope decay rate</p>
<p>4 &nbsp; &nbsp; &nbsp; &nbsp;envelope decay disable</p>
<p>5 &nbsp; &nbsp; &nbsp; &nbsp;envelope decay looping enable</p>
<p><br></p>
<p><br/></p>
<p> When the envelope decay disable bit (bit 4) is set (1), the current volume value (bits 0-3) is sent directly to the channel's DAC. However, depending on certain conditions, this 4-bit volume value will be ignored, and a value of 0 will be sent to the DAC instead. This means that while the channel is enabled (producing sound), the output of the channel (what you'll hear from the DAC) will either be the 4-bit volume value, or 0. This also means that a 4-bit volume value of 0 will result in no audible sound. These conditions are as follows:</p>
<p><br></p>
<p><br/></p>
<p> - When hardware in the channel wants to disable it's sound output (like the length counter, or sweep unit (square channels only)).</p>
<p><br></p>
<p><br/></p>
<p> - On the negative portion of the output frequency signal coming from the duty cycle / random number generator hardware (square wave channel / noise channel).</p>
<p><br></p>
<p><br/></p>
<p> When the envelope decay disable bit is cleared, bits 0-3 now control the envelope decay rate, and an internal 4-bit down counter (hereon the envelope decay counter) now controls the channel's volume level. "Envelope decay" is used to describe the action of the channel's audio output volume starting from a certain value, and decreasing by 1 at a fixed (linear) rate (which produces a "fade-out" sounding effect). This fixed decrement rate is controlled by the envelope decay rate (bits 0-3). The calculated decrement rate is 240Hz/(N+1), where N is any value between $0-$F.</p>
<p><br></p>
<p><br/></p>
<p> When the channel's envelope decay counter reaches a value of 0, depending on the status of the envelope decay looping enable bit (bit 5, which is shared with the length counter's clock disable bit), 2 different things will happen:</p>
<p><br></p>
<p><br/></p>
<p>bit 5 &nbsp; &nbsp; &nbsp; &nbsp;action</p>
<p>----- &nbsp; &nbsp; &nbsp; &nbsp;------</p>
<p>0 &nbsp; &nbsp; &nbsp; &nbsp;The envelope decay count will stay at 0 (channel silenced).</p>
<p>1 &nbsp; &nbsp; &nbsp; &nbsp;The envelope decay count will wrap-around to $F (upon the next clock cycle). The envelope decay counter will then continue to count down normally.</p>
<p><br></p>
<p><br/></p>
<p> Only a write out to $4003/$4007/$400F will reset the current envelope decay counter to a known state (to $F, the maximum volume level) for the appropriate channel's envelope decay hardware. Otherwise, the envelope decay counter is always counting down (by 1) at the frequency currently contained in the volume / envelope decay rate bits (even when envelope decays are disabled (setting bit 4)), except when the envelope decay counter contains a value of 0, and envelope decay looping (bit 5) is disabled (0).</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p>+------------+</p>
<p>| Sweep unit |</p>
<p>+------------+</p>
<p> The sweep unit is only found in the square wave channels. The controls for the sweep unit have been mapped in at $4001 for square 1, and $4005 for square 2.</p>
<p><br></p>
<p><br/></p>
<p> The controls</p>
<p> ------------</p>
<p> Bit 7 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;when this bit is set (1), sweeping is active. This results in real-time increasing or decreasing of the the current wavelength value (the audible frequency will decrease or increase, respectively). The wavelength value in $4002/3 ($4006/7) is constantly read &amp; updated by the sweep. Modifying the contents of $4002/3 will be immediately audible, and will result in the sweep now starting from this new wavelength value.</p>
<p><br></p>
<p><br/></p>
<p> Bits 6-4 &nbsp; &nbsp; &nbsp; &nbsp;These 3 bits represent the sweep refresh rate, or the frequency at which $4002/3 is updated with the new calculated wavelength. The refresh rate frequency is 120Hz/(N+1), where N is the value written, between 0 and 7.</p>
<p><br></p>
<p><br/></p>
<p> Bit 3 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;This bit controls the sweep mode. When this bit is set (1), sweeps will decrease the current wavelength value, as a 0 will increase the current wavelength.</p>
<p><br></p>
<p><br/></p>
<p> Bits 2-0 &nbsp; &nbsp; &nbsp; &nbsp;These bits control the right shift amount of the new calculated sweep update wavelength. Code that shows how the sweep unit calculates a new sweep wavelength is as follows:</p>
<p> </p>
<p>bit 3</p>
<p>-----</p>
<p>0 &nbsp; &nbsp; &nbsp; &nbsp;New = Wavelength + (Wavelength &gt;&gt; N)</p>
<p>1 &nbsp; &nbsp; &nbsp; &nbsp;New = Wavelength - (Wavelength &gt;&gt; N) (minus an additional 1, if using square wave channel 1)</p>
<p><br></p>
<p><br/></p>
<p> where N is the the shift right value, between 0-7.</p>
<p><br></p>
<p><br/></p>
<p> Note that in decrease mode, for subtracting the 2 values:</p>
<p> 1's compliment (NOT) is being used for square wave channel 1</p>
<p> 2's compliment (NEG) is being used for square wave channel 2</p>
<p><br></p>
<p><br/></p>
<p> This information is currently the only known difference between the 2 square wave channels.</p>
<p><br></p>
<p><br/></p>
<p> On each sweep refresh clock, the Wavelength register will be updated with the New value, but only if all 3 of these conditions are met:</p>
<p><br></p>
<p><br/></p>
<p> - bit 7 is set (sweeping enabled)</p>
<p> - the shift value (which is N in the formula) does not equal to 0</p>
<p> - the channel's length counter contains a non-zero value</p>
<p><br></p>
<p><br/></p>
<p> Notes</p>
<p> -----</p>
<p> There are certain conditions that will cause the sweep unit to silence the channel, and halt the sweep refresh clock (which effectively stops sweep action, if any). Note that these conditions pertain regardless of any sweep refresh rate values, or if sweeping is enabled/disabled (via bit 7).</p>
<p><br></p>
<p><br/></p>
<p> - an 11-bit wavelength value less than $008 will cause this condition</p>
<p> - if the sweep unit is currently set to increase mode, the New calculated wavelength value will always be tested to see if a carry (bit $B) was generated or not (if sweeping is enabled, this carry will be examined before the Wavelength register is updated) from the shift addition calculation. If carry equals 1, the channel is silenced, and sweep action is halted.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p>+----------------------+</p>
<p>| Duty cycle generator |</p>
<p>+----------------------+</p>
<p> The duty cycle generator takes the fequency produced from the 11-bit programmable timer, and uses a 4 bit counter to produce 4 types of duty cycles. The output frequency is then 1/16 that of the programmable timer. The duty cycle hardware is only found in the square wave channels. The bit assignments are as follows:</p>
<p><br></p>
<p><br/></p>
<p>$4000(sq1)/$4004(sq2)</p>
<p>---------------------</p>
<p>6-7 &nbsp; &nbsp; &nbsp; &nbsp;Duty cycle type</p>
<p><br></p>
<p><br/></p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;duty (positive/negative)</p>
<p>val &nbsp; &nbsp; &nbsp; &nbsp;in clock cycles</p>
<p>--- &nbsp; &nbsp; &nbsp; &nbsp;---------------</p>
@ -533,25 +533,25 @@
<p>01 &nbsp; &nbsp; &nbsp; &nbsp; 4/12</p>
<p>10 &nbsp; &nbsp; &nbsp; &nbsp; 8/ 8</p>
<p>11 &nbsp; &nbsp; &nbsp; &nbsp;12/ 4</p>
<p><br></p>
<p><br/></p>
<p> Where val represents bits 6-7 of $4000/$4004.</p>
<p><br></p>
<p><br/></p>
<p> This counter is reset when the length counter of the same channel is written to (via $4003/$4007).</p>
<p><br></p>
<p><br/></p>
<p> The output frequency at this point will now be fed to the volume/envelope decay hardware.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p>+----------------------+</p>
<p>| Wavelength converter |</p>
<p>+----------------------+</p>
<p> The wavelength converter is only used in the noise channel. It is used to convert a given 4-bit value to an 11-bit wavelength, which then is sent to the noise's own programmable timer. Here is the bit descriptions:</p>
<p><br></p>
<p><br/></p>
<p>$400E bits</p>
<p>----------</p>
<p>0-3 &nbsp; &nbsp; &nbsp; &nbsp;The 4-bit value to be converted</p>
<p><br></p>
<p><br/></p>
<p> Below is a conversion chart that shows what 4-bit value will represent the 11-bit wavelength to be fed to the channel's programmable timer:</p>
<p><br></p>
<p><br/></p>
<p>value &nbsp; &nbsp; &nbsp; &nbsp;octave &nbsp; &nbsp; &nbsp; &nbsp;scale &nbsp; &nbsp; &nbsp; &nbsp;CPU clock cycles (11-bit wavelength+1)</p>
<p>----- &nbsp; &nbsp; &nbsp; &nbsp;------ &nbsp; &nbsp; &nbsp; &nbsp;----- &nbsp; &nbsp; &nbsp; &nbsp;--------------------------------------</p>
<p>0 &nbsp; &nbsp; &nbsp; &nbsp;15 &nbsp; &nbsp; &nbsp; &nbsp;A &nbsp; &nbsp; &nbsp; &nbsp;002</p>
@ -570,40 +570,40 @@
<p>D &nbsp; &nbsp; &nbsp; &nbsp; 7 &nbsp; &nbsp; &nbsp; &nbsp;A &nbsp; &nbsp; &nbsp; &nbsp;1FC</p>
<p>E &nbsp; &nbsp; &nbsp; &nbsp; 6 &nbsp; &nbsp; &nbsp; &nbsp;A &nbsp; &nbsp; &nbsp; &nbsp;3F9</p>
<p>F &nbsp; &nbsp; &nbsp; &nbsp; 5 &nbsp; &nbsp; &nbsp; &nbsp;A &nbsp; &nbsp; &nbsp; &nbsp;7F2</p>
<p><br></p>
<p><br/></p>
<p> Octave and scale information is provided for the music enthusiast programmer who is more familiar with notes than clock cycles.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p>+-------------------------+</p>
<p>| Random number generator |</p>
<p>+-------------------------+</p>
<p> The noise channel has a 1-bit pseudo-random number generator. It's based on a 15-bit shift register, and an exclusive or gate. The generator can produce two types of random number sequences: long, and short. The long sequence generates 32,767-bit long number patterns. The short sequence generates 93-bit long number patterns. The 93-bit mode will generally produce higher sounding playback frequencys on the channel. Here is the bit that controls the mode:</p>
<p><br></p>
<p><br/></p>
<p>$400E bits</p>
<p>----------</p>
<p>7 &nbsp; &nbsp; &nbsp; &nbsp;mode</p>
<p><br></p>
<p><br/></p>
<p> If mode=0, then 32,767-bit long number sequences will be produced (32K mode), otherwise 93-bit long number sequences will be produced (93-bit mode).</p>
<p><br></p>
<p><br/></p>
<p> The following diagram shows where the XOR taps are taken off the shift register to produce the 1-bit pseudo-random number sequences for each mode.</p>
<p><br></p>
<p><br/></p>
<p>mode &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&lt;-----</p>
<p>---- &nbsp; &nbsp; &nbsp; &nbsp;EDCBA9876543210</p>
<p>32K &nbsp; &nbsp; &nbsp; &nbsp;**</p>
<p>93-bit &nbsp; &nbsp; &nbsp; &nbsp;* &nbsp; &nbsp; *</p>
<p><br></p>
<p><br/></p>
<p> The current result of the XOR will be transferred into bit position 0 of the SR, upon the next shift cycle. The 1-bit random number output is taken from pin E, is inverted, then is sent to the volume/envelope decay hardware for the noise channel. The shift register is shifted upon recieving 2 clock pulses from the programmable timer (the shift frequency will be half that of the frequency from the programmable timer (one octave lower)).</p>
<p><br></p>
<p><br/></p>
<p> On system reset, this shift register is loaded with a value of 1.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p>RP2A03E quirk</p>
<p>-------------</p>
<p> I have been informed that revisions of the 2A03 before "F" actually lacked support for the 93-bit looped noise playback mode. While the Famicom's 2A03 went through 4 revisions (E..H), I think that only one was ever used for the front loading NES: "G". Other differences between 2A03 revisions are unknown.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p>EOF</p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com">Full featured Documentation generator</a></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour/iphone-website-generation">Create iPhone web-based documentation</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>NSF Format</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -54,20 +54,20 @@
<p><span class="rvts28">NES Music Format Spec</span></p>
<p> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;---------------------</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p>By: Kevin Horton &nbsp;khorton@iquest.net</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p>NOTE:</p>
<p>-----</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p>Remember that I am very willing to add stuff and update this spec. &nbsp;If</p>
<p>you find a new sound chip or other change let me know and I will get back</p>
<p>with you. &nbsp;E-mail to the above address. </p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p>V1.61 - 06/27/2000 Updated spec a bit</p>
<p>V1.60 - 06/01/2000 Updated Sunsoft, MMC5, and Namco chip information</p>
<p>V1.50 - 05/28/2000 Updated FDS, added Sunsoft and Namco chips</p>
@ -75,24 +75,24 @@
<p>V1.30 - 11/14/1999 Added MMC5 audio bit, added some register info</p>
<p>V1.20 - 09/12/1999 VRC and FDS prelim sound info added</p>
<p>V1.00 - 05/11/1999 First official NSF specification file</p>
<p><br></p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><br/></p>
<p>This file encompasses a way to transfer NES music data in a small, easy to</p>
<p>use format.</p>
<p><br></p>
<p><br/></p>
<p>The basic idea is one rips the music/sound code from an NES game and prepends</p>
<p>a small header to the data.</p>
<p><br></p>
<p><br/></p>
<p>A program of some form (6502/sound emulator) then takes the data and loads</p>
<p>it into the proper place into the 6502's address space, then inits and plays</p>
<p>the tune.</p>
<p><br></p>
<p><br/></p>
<p>Here's an overview of the header:</p>
<p><br></p>
<p><br/></p>
<p>offset &nbsp;# of bytes &nbsp; Function</p>
<p>----------------------------</p>
<p><br></p>
<p><br/></p>
<p>0000 &nbsp; &nbsp;5 &nbsp; STRING &nbsp;"NESM",01Ah &nbsp;; denotes an NES sound format file</p>
<p>0005 &nbsp; &nbsp;1 &nbsp; BYTE &nbsp; &nbsp;Version number (currently 01h)</p>
<p>0006 &nbsp; &nbsp;1 &nbsp; BYTE &nbsp; &nbsp;Total songs &nbsp; (1=1 song, 2=2 songs, etc)</p>
@ -121,43 +121,43 @@
<p> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bits 6,7: future expansion: they *must* be 0</p>
<p>007c &nbsp; &nbsp;4 &nbsp; ---- &nbsp; &nbsp;4 extra bytes for expansion (must be 00h)</p>
<p>0080 &nbsp; &nbsp;nnn ---- &nbsp; &nbsp;The music program/data follows</p>
<p><br></p>
<p><br/></p>
<p>This may look somewhat familiar; &nbsp;if so that's because this is somewhat</p>
<p>sorta of based on the PSID file format for C64 music/sound.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p>Loading a tune into RAM</p>
<p>-----------------------</p>
<p><br></p>
<p><br/></p>
<p>If offsets 0070h to 0077h have 00h in them, then bankswitching is *not*</p>
<p>used. &nbsp;If one or more bytes are something other than 00h then bankswitching</p>
<p>is used. &nbsp;If bankswitching is used then the load address is still used,</p>
<p>but you now use (ADDRESS AND 0FFFh) to determine where on the first bank</p>
<p>to load the data.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p>Each bank is 4K in size, and that means there are 8 of them for the</p>
<p>entire 08000h-0ffffh range in the 6502's address space. &nbsp;You determine where</p>
<p>in memory the data goes by setting bytes 070h thru 077h in the file.</p>
<p>These determine the inital bank values that will be used, and hence where</p>
<p>the data will be loaded into the address space.</p>
<p><br></p>
<p><br/></p>
<p>Here's an example:</p>
<p><br></p>
<p><br/></p>
<p>METROID.NSF will be used for the following explaination.</p>
<p><br></p>
<p><br/></p>
<p>The file is set up like so: &nbsp;(starting at 070h in the file)</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p>0070: 05 05 05 05 05 05 05 05 - 00 00 00 00 00 00 00 00</p>
<p>0080: ... music data goes here...</p>
<p><br></p>
<p><br/></p>
<p>Since 0070h-0077h are something other than 00h, then we know that this</p>
<p>tune uses bankswitching. &nbsp;The load address for the data is specified as</p>
<p>08000h. &nbsp;We take this AND 0fffh and get 0000h, so we will load data in</p>
<p>at byte 0 of bank 0, since data is loaded into the banks sequentially</p>
<p>starting from bank 0 up until the music data is fully loaded.</p>
<p><br></p>
<p><br/></p>
<p>Metroid has 6 4K banks in it, numbered 0 through 5. &nbsp;The 6502's address</p>
<p>space has 8 4K bankswitchable blocks on it, starting at 08000h-08fffh,</p>
<p>09000h-09fffh, 0a000h-0afffh ... 0f000h-0ffffh. &nbsp;Each one of these is 4K in</p>
@ -170,95 +170,95 @@
<p>To do this, the value at 0070h in the file is written to 05ff8h, 0071h</p>
<p>is written to 05ff9h, etc. all the way to 0077h is written to 05fffh.</p>
<p>This is should be done before every call to the init routine.</p>
<p><br></p>
<p><br/></p>
<p>If the tune was not bankswitched, then it is simply loaded in at the </p>
<p>specified load address, until EOF</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p>Initalizing a tune</p>
<p>------------------</p>
<p><br></p>
<p><br/></p>
<p>This is pretty simple. &nbsp;Load the desired song # into the accumulator,</p>
<p>minus 1 and set the X register to specify PAL (X=1) or NTSC (X=0).</p>
<p>If this is a single standard tune (i.e. PAL *or* NTSC but not both)</p>
<p>then the X register contents should not matter. &nbsp;Once the song # and</p>
<p>optional PAL/NTSC standard are loaded, simply call the INIT address.</p>
<p>Once init is done, it should perform an RTS.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p>Playing a tune</p>
<p>--------------</p>
<p><br></p>
<p><br/></p>
<p>Once the tune has been initalized, it can now be played. &nbsp;To do this,</p>
<p>simply call the play address several times a second. &nbsp;How many times</p>
<p>per second is determined by offsets 006eh and 006fh in the file.</p>
<p>These bytes denote the speed of playback in 1/1000000ths of a second. &nbsp;</p>
<p>For the "usual" 60Hz playback rate, set this to 411ah. &nbsp;</p>
<p><br></p>
<p><br/></p>
<p>To generate a differing playback rate, use this formula:</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p> &nbsp; &nbsp; &nbsp; &nbsp; 1000000</p>
<p>PBRATE= ---------</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;speed</p>
<p><br></p>
<p><br/></p>
<p>Where PBRATE is the value you stick into 006e/006fh in the file, and</p>
<p>speed is the desired speed in hertz. </p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p>"Proper" way to load the tune</p>
<p>-----------------------------</p>
<p><br></p>
<p><br/></p>
<p>1) If the tune is bankswitched, go to #3.</p>
<p><br></p>
<p><br/></p>
<p>2) Load the data into the 6502's address space starting at the specified</p>
<p> &nbsp; load address. Go to #4.</p>
<p><br></p>
<p><br/></p>
<p>3) Load the data into a RAM area, starting at (start_address AND 0fffh).</p>
<p><br></p>
<p><br/></p>
<p>4) Tune load is done.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p>"Proper" way to init a tune</p>
<p>---------------------------</p>
<p><br></p>
<p><br/></p>
<p>1) Clear all RAM at 0000h-07ffh.</p>
<p><br></p>
<p><br/></p>
<p>2) Clear all RAM at 6000h-7fffh.</p>
<p><br></p>
<p><br/></p>
<p>3) Init the sound registers by writing 00h to 04000-0400Fh, 10h to 4010h,</p>
<p> &nbsp; and 00h to 4011h-4013h.</p>
<p><br></p>
<p><br/></p>
<p>4) Set volume register 04015h to 00fh.</p>
<p><br></p>
<p><br/></p>
<p>5) If this is a banked tune, load the bank values from the header into</p>
<p> &nbsp; 5ff8-5fffh.</p>
<p><br></p>
<p><br/></p>
<p>6) Set the accumulator and X registers for the desired song.</p>
<p><br></p>
<p><br/></p>
<p>7) Call the music init routine.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p>"Proper" way to play a tune</p>
<p>---------------------------</p>
<p><br></p>
<p><br/></p>
<p>1) Call the play address of the music at periodic intervals determined</p>
<p> &nbsp; by the speed words. &nbsp;Which word to use is determined by which mode</p>
<p> &nbsp; you are in- PAL or NTSC.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p>Sound Chip Support</p>
<p>------------------</p>
<p><br></p>
<p><br/></p>
<p>Byte 007bh of the file stores the sound chip flags. &nbsp;If a particular flag</p>
<p>is set, those sound registers should be enabled. &nbsp;If the flag is clear,</p>
<p>then those registers should be disabled.</p>
<p><br></p>
<p><br/></p>
<p>* VRCVI Uses registers 9000-9002, A000-A002, and B000-B002, write only.</p>
<p><br></p>
<p><br/></p>
<p>Caveats: 1) The above registers are *write only* and must not disrupt music</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;code that happens to be stored there.</p>
<p><br></p>
<p><br/></p>
<p> &nbsp; &nbsp; &nbsp; &nbsp; 2) Major caveat: &nbsp;The A0 and A1 lines are flipped on a few games!!</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;If you rip the music and it sounds all funny, flip around </p>
<p> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;the xxx1 and xxx2 register pairs. &nbsp;(i.e. 9001 and 9002) &nbsp;9000</p>
@ -269,52 +269,52 @@
<p> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;will not for instance.</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp; </p>
<p> &nbsp; &nbsp; &nbsp; &nbsp; 3) See my VRCVI.TXT doc for a complete register description.</p>
<p><br></p>
<p><br/></p>
<p>* VRCVII Uses registers 9010 and 9030, write only.</p>
<p><br></p>
<p><br/></p>
<p>Caveats: 1) Same caveat as #1, above.</p>
<p><br></p>
<p><br/></p>
<p> &nbsp; &nbsp; &nbsp; &nbsp; 2) See my VRCVII.TXT doc for a complete register description.</p>
<p><br></p>
<p><br/></p>
<p>* FDS Sound uses registers from 4040 through 4092.</p>
<p><br></p>
<p><br/></p>
<p>Caveats: 1) 6000-DFFF is assumed to be RAM, since 6000-DFFF is RAM on the</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;FDS. &nbsp;E000-FFFF is usually not included in FDS games because</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;it is the BIOS ROM. &nbsp;However, it can be used on FDS rips to help</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;the ripper (for modified play/init addresses).</p>
<p><br></p>
<p><br/></p>
<p> &nbsp; &nbsp; &nbsp; &nbsp; 2) Bankswitching operates slightly different on FDS tunes. &nbsp;</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;5FF6 and 5FF7 control the banks 6000-6FFF and 7000-7FFF </p>
<p> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;respectively. &nbsp;NSF header offsets 76h and 77h correspond to</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;*both* 6000-7FFF *AND* E000-FFFF. &nbsp;Keep this in mind!</p>
<p><br></p>
<p><br/></p>
<p>* MMC5 Sound Uses registers 5000-5015, write only as well as 5205 and 5206,</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;and 5C00-5FF5</p>
<p><br></p>
<p><br/></p>
<p>Caveats: 1) Generating a proper doc file. &nbsp;Be patient. &nbsp;</p>
<p><br></p>
<p><br/></p>
<p> &nbsp; &nbsp; &nbsp; &nbsp; 2) 5205 and 5206 are a hardware 8*8 multiplier. &nbsp;The idea being</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;you write your two bytes to be multiplied into 5205 and 5206</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;and after doing so, you read the result back out. &nbsp;Still working</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;on what exactly triggers it (I think a write to either 5205</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;or 5206 triggers the multiply).</p>
<p><br></p>
<p><br/></p>
<p> &nbsp; &nbsp; &nbsp; &nbsp; 3) 5C00-5FF5 should be RAM to emulate EXRAM while in MMC5 mode.</p>
<p><br></p>
<p><br/></p>
<p>Note: Thanks to Mamiya for the EXRAM info.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p>* Namco 106 Sound Uses registers 4800 and F800. &nbsp;</p>
<p><br></p>
<p><br/></p>
<p> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;This works similar to VRC7. &nbsp;4800 is the "data" port which is</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;readable and writable, while F800 is the "address" port and is</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;writable only.</p>
<p><br></p>
<p><br/></p>
<p> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;The address is 7 bits plus a "mode" bit. &nbsp;Bit 7 controls</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;address auto-incrementing. &nbsp;If bit 7 is set, the address will</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;auto-increment after a byte of data is read or written from/to</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;4800.</p>
<p><br></p>
<p><br/></p>
<p> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;$40 ffffffff f:frequency L</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;$42 ffffffff f:frequency M</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;$44 ---sssff f:frequency H s:tone length (8-s)*4 in 4bit-samples</p>
@ -322,74 +322,74 @@
<p> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;$47 -cccvvvv v:linear volume 1+c:number of channels in use($7F only)</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;$40-47:ch1 $48-4F:ch2 ... $78-7F:ch8</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ch2-ch8 same to ch1</p>
<p><br></p>
<p><br/></p>
<p> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;$00-3F(8ch)...77(1ch) hhhhllll tone data</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;h:odd address data(signed 4bit)</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;l:even address data(signed 4bit)</p>
<p><br></p>
<p><br/></p>
<p> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;real frequency = (f * NES_BASECYCLES) / (40000h * (c+1) * (8-s)*4 * 45)</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;NES_BASECYCLES 21477270(Hz)</p>
<p><br></p>
<p><br/></p>
<p>Note: &nbsp;Very Special thanks to Mamiya for this information!</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p>* Sunsoft FME-07 Sound uses registers C000 and E000</p>
<p><br></p>
<p><br/></p>
<p> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;This is similar to the common AY 3-8910 sound chip that is</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;used on tons of arcade machines, and in the Intellivision.</p>
<p><br></p>
<p><br/></p>
<p> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;C000 is the address port</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;E000 is the data port</p>
<p><br></p>
<p><br/></p>
<p> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Both are write-only, and behave like the AY 3-8910.</p>
<p><br></p>
<p><br/></p>
<p>Note: &nbsp;Special thanks to Mamiya for this information as well</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p>Caveats</p>
<p>-------</p>
<p><br></p>
<p><br/></p>
<p>1) The starting song number and maximum song numbers start counting at</p>
<p> &nbsp; 1, while the init address of the tune starts counting at 0. &nbsp;To</p>
<p> &nbsp; "fix", simply pass the desired song number minus 1 to the init</p>
<p> &nbsp; routine.</p>
<p><br></p>
<p><br/></p>
<p>2) The NTSC speed word is used *only* for NTSC tunes, or dual PAL/NTSC tunes.</p>
<p> &nbsp; The PAL speed word is used *only* for PAL tunes, or dual PAL/NTSC tunes.</p>
<p><br></p>
<p><br/></p>
<p>3) The length of the text in the name, artist, and copyright fields must </p>
<p> &nbsp; be 31 characters or less! &nbsp;There has to be at least a single NULL byte</p>
<p> &nbsp; (00h) after the text, between fields.</p>
<p><br></p>
<p><br/></p>
<p>4) If a field is not known (name, artist, copyright) then the field must</p>
<p> &nbsp; contain the string "&lt;?&gt;" (without quotes). &nbsp;</p>
<p><br></p>
<p><br/></p>
<p>5) There should be 8K of RAM present at 6000-7FFFh. MMC5 tunes need RAM at</p>
<p> &nbsp; 5C00-5FF7 to emulate its EXRAM. 8000-FFFF Should be read-only (not </p>
<p> &nbsp; writable) after a tune has loaded. &nbsp;The only time this area should be </p>
<p> &nbsp; writable is if an FDS tune is being played.</p>
<p><br></p>
<p><br/></p>
<p>6) Do not assume the state of *anything* on entry to the init routine</p>
<p> &nbsp; except A and X. &nbsp;Y can be anything, as can the flags. &nbsp;</p>
<p><br></p>
<p><br/></p>
<p>7) Do not assume the state of *anything* on entry to the play routine either.</p>
<p> &nbsp; Flags, X, A, and Y could be at any state. &nbsp;I've fixed about 10 tunes</p>
<p> &nbsp; because of this problem and the problem, above.</p>
<p><br></p>
<p><br/></p>
<p>8) The stack sits at 1FFh and grows down. &nbsp;Make sure the tune does not</p>
<p> &nbsp; attempt to use 1F0h-1FFh for variables. (Armed Dragon Villigust did and</p>
<p> &nbsp; I had to relocate its RAM usage to 2xx)</p>
<p><br></p>
<p><br/></p>
<p>9) Variables should sit in the 0000h-07FFh area *only*. &nbsp;If the tune writes</p>
<p> &nbsp; outside this range, say 1400h this is bad and should be relocated. </p>
<p> &nbsp; (Terminator 3 did this and I relocated it to 04xx).</p>
<p><br></p>
<p><br/></p>
<p>That's it!</p>
<p><br></p>
<p><br></p>
<p><br></p>
<p><br></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour/iphone-website-generation">Create iPhone web-based documentation</a></p>
<p><br/></p>
<p><br/></p>
<p><br/></p>
<p><br/></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour/iphone-website-generation">Free iPhone documentation generator</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>Name Table Viewer</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -53,31 +53,31 @@
<div id="topic_content">
<p><span class="rvts35">Name Table Viewer</span></p>
<p><br></p>
<p><br/></p>
<p><span class="rvts12">Introduction</span></p>
<p><br></p>
<p><br/></p>
<p>This displays the name tables as they exist in PPU memory. Furthermore, it shows you the game's current mirroring, and the current state of the PPU's scroll registers (if the option for this is set). &nbsp;It also lets you change the mirroring on the fly (which will break most games).</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts16">Using the Name Table Viewer</span></p>
<p><br></p>
<p><br/></p>
<p>Note that the Name Table Viewer will display the name tables using whatever CHR is present at the time the "Display on Scanline" scanline is reached. So for example if it does not correctly display a game's status bar, try setting it to update on a scanline in which the status bar is displayed.</p>
<p><br></p>
<p><br/></p>
<p>The same applies to the Scroll Lines: they display the state of the PPU scroll registers when the "Display on Scanline" scanline is reached. So for example if said scanline is within the game's status bar, it will not display level scrolling because the horizontal scroll is always zero at the time that scanline is drawn. To display the level scrolling, set it to update on a scanline in which the level is displayed.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts10">Display on scanline</span></p>
<p>This will show what it looks like when the NES has finished drawing that many scanlines to screen including any PPU data scroll line movement</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts10">Getting Tile Addresses</span></p>
<p>Placing the mouse cursor over the name table image will display the tile address of a given tile.</p>
<p><br></p>
<p><br></p>
<p><br></p>
<p><br></p>
<p><br></p>
<p><br></p>
<p><br></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com">Easy CHM and documentation editor</a></p>
<p><br/></p>
<p><br/></p>
<p><br/></p>
<p><br/></p>
<p><br/></p>
<p><br/></p>
<p><br/></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com">Full featured Documentation generator</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>Network Play</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -53,13 +53,13 @@
<div id="topic_content">
<p><span class="rvts17">Network Play</span></p>
<p><br></p>
<p><br/></p>
<p>Allows you to play against a human opponent over the internet. &nbsp;Requires the use of FCEU server.</p>
<p><br></p>
<p><br/></p>
<p>Currently however, FCEU Server runs very poorly and is hardly useable. &nbsp;This issue will be resolved in a future release.</p>
<p><br></p>
<p><br></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/help-authoring-tool">Free help authoring tool</a></p>
<p><br/></p>
<p><br/></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour">Easily create CHM Help documents</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>Overview</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -53,13 +53,13 @@
<div id="topic_content">
<p><span class="rvts17">FCEUX</span></p>
<p><br></p>
<p><br/></p>
<p>FCEUX is a cross platform, NTSC and PAL Famicom/NES emulator that is an evolution of the original FCE Ultra emulator. &nbsp;Over time FCE Ultra had separated into many separate branches. &nbsp;</p>
<p><br></p>
<p><br/></p>
<p>The concept behind FCEUX is to merge elements from FCEU Ultra, FCEU rerecording, FCEUXD, FCEUXDSP, FCEUXDSP CE, and FCEU-mm into a single branch of FCEU. &nbsp;As the X implies, it is an all-encompassing version of the FCEU emulator that provides the best of all worlds for the general player, the <a class="rvts18" href="ROMHacking.html">ROM-hacking community</a>, and the <a class="rvts18" href="ToolAssistedSpeedruns.html">Tool-Assisted Speedrun Community</a>.</p>
<p><br></p>
<p><br></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/help-authoring-tool">Full featured multi-format Help generator</a></p>
<p><br/></p>
<p><br/></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com">Free CHM Help documentation generator</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>Overview of Included Scripts</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -53,84 +53,63 @@
<div id="topic_content">
<p>(written by FatRatKnight)</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts17">Overview of Included Scripts</span></p>
<p><br></p>
<p><br/></p>
<p>Many users of FCEUX do not investigate the <span class="rvts38">luaScripts</span> folder, or, for that matter, ignore lua scripting altogether. The purpose of this text is to let users know that knowing how to <span class="rvts30">create</span> lua scripts is not a requirement in <span class="rvts30">using</span> them. Indeed, there are several scripts that, if you just load them, will explain themselves enough that you don't need to know how to program at all in order to use them. Besides, they shouldn't need to be re-programmed anyway if you are to use them, for if they needed programming experience just to be used, their existence is largely defeated by that very fact!</p>
<p><br></p>
<p><br/></p>
<p>FCEUX itself is a program that you load. Our amazing programmers did all the work already so you don't need to program up your own FCEUX to run it, do you? The same can be said of these scripts.</p>
<p><br></p>
<p><br/></p>
<p>So, open the <span class="rvts38">luaScripts</span> folder and actually take the time to look at some of these scripts. You may use a text-editing program to open these if you so wish.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts36">General Purpose scripts:</span></p>
<p>These may be used with any game freely. Else, the "General" part of General Purpose doesn't apply.</p>
<p><br></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
Mutlitrack2.lua &nbsp; &nbsp; &nbsp; &nbsp;- &nbsp; &nbsp; &nbsp; &nbsp;Tracks future input that FCEUX promptly loses on state-load, for <a class="rvts18" href="ToolAssistedSpeedruns.html">TAS</a></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
Subtitler.lua &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;- &nbsp; &nbsp; &nbsp; &nbsp;For easier use of FCEUX's built-in subtitles for <a class="rvts18" href="fm2.html">.fm2</a> files</p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
Rewinder.lua &nbsp; &nbsp; &nbsp; &nbsp;- &nbsp; &nbsp; &nbsp; &nbsp;A way to rewind backwards by pressing a button</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<ul style="text-indent: 0px; margin-left: 24px; list-style-position: outside;">
<li>Mutlitrack2.lua &nbsp; &nbsp; &nbsp; &nbsp;- &nbsp; &nbsp; &nbsp; &nbsp;Tracks future input that FCEUX promptly loses on state-load, for <a class="rvts18" href="ToolAssistedSpeedruns.html">TAS</a></li>
<li>Subtitler.lua &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;- &nbsp; &nbsp; &nbsp; &nbsp;For easier use of FCEUX's built-in subtitles for <a class="rvts18" href="fm2.html">.fm2</a> files</li>
<li>Rewinder.lua &nbsp; &nbsp; &nbsp; &nbsp;- &nbsp; &nbsp; &nbsp; &nbsp;A way to rewind backwards by pressing a button</li>
</ul>
<p><br/></p>
<p><br/></p>
<p><span class="rvts36">Game Specific scripts:</span></p>
<p>These scripts are built specifically for certain games. Attempting to run them while you've loaded another ROM will likely cause undesired results. The meaning of "undesired results" in this case are things like crashing the game, causing it to glitch in other ways, or having nonsense numbers and pixels show up.</p>
<p><br></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
BugsBunnyBirthdayBlowout.lua</p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
Excitingbike.lua</p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
Excitingbike-speedometeronly.lua</p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
Galaxian.lua</p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
Gradius-BulletHell.lua</p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
Machrider.lua</p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
MegamanII-LaserEyes.lua</p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
PunchOutChallenge.lua</p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
PunchOutStats.lua</p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
PunchOutTraining.lua</p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
SMB2U.lua</p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
SMB3-RainbowRiding.lua</p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
SMB-AreaScrambler.lua</p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
SMB-CompetitionRecorder.lua</p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
SMB-HitBoxes.lua</p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
SMB-Jetpack.lua</p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
SMB-Lives&amp;HPDisplay.lua</p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
SMB-Mouse.lua</p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
SMB-Snow.lua</p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
TeenageMutantNinjaTurtles.lua</p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
tetris.lua</p>
<p><br></p>
<p><br></p>
<p><br></p>
<p><br/></p>
<ul style="text-indent: 0px; margin-left: 24px; list-style-position: outside;">
<li>BugsBunnyBirthdayBlowout.lua</li>
<li>Excitingbike.lua</li>
<li>Excitingbike-speedometeronly.lua</li>
<li>Galaxian.lua</li>
<li>Gradius-BulletHell.lua</li>
<li>Machrider.lua</li>
<li>MegamanII-LaserEyes.lua</li>
<li>PunchOutChallenge.lua</li>
<li>PunchOutStats.lua</li>
<li>PunchOutTraining.lua</li>
<li>SMB2U.lua</li>
<li>SMB3-RainbowRiding.lua</li>
<li>SMB-AreaScrambler.lua</li>
<li>SMB-CompetitionRecorder.lua</li>
<li>SMB-HitBoxes.lua</li>
<li>SMB-Jetpack.lua</li>
<li>SMB-Lives&amp;HPDisplay.lua</li>
<li>SMB-Mouse.lua</li>
<li>SMB-Snow.lua</li>
<li>TeenageMutantNinjaTurtles.lua</li>
<li>tetris.lua</li>
</ul>
<p><br/></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts36">Auxiliary Functions scripts:</span></p>
<p>These scripts exist to make the life of programmers easier. As such, if you don't program, you may skip over these scripts. These should not be run by themselves, for they themselves probably don't have any programming to do any work usefully. It's like giving yourself a clip of bullets with no gun to use.</p>
<p><br></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
FRKfunctions.lua &nbsp; &nbsp; &nbsp; &nbsp;- &nbsp; &nbsp; &nbsp; &nbsp;To aid with input.get, display, and registers</p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
x_functions.lua</p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
shapedefs.lua &nbsp; &nbsp; &nbsp; &nbsp;- &nbsp; &nbsp; &nbsp; &nbsp;Contains a few shape-drawing functions</p>
<p><br/></p>
<ul style="text-indent: 0px; margin-left: 24px; list-style-position: outside;">
<li>FRKfunctions.lua &nbsp; &nbsp; &nbsp; &nbsp;- &nbsp; &nbsp; &nbsp; &nbsp;To aid with input.get, display, and registers</li>
<li>x_functions.lua</li>
<li>shapedefs.lua &nbsp; &nbsp; &nbsp; &nbsp;- &nbsp; &nbsp; &nbsp; &nbsp;Contains a few shape-drawing functions</li>
</ul>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/help-authoring-tool">Single source CHM, PDF, DOC and HTML Help creation</a></p>
</div>

View File

@ -3,7 +3,7 @@
<head>
<title>PPU - 2C02</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -56,21 +56,21 @@
<p>*NTSC 2C02 technical operation*</p>
<p>*******************************</p>
<p>Brad Taylor (big_time_software@hotmail.com)</p>
<p><br></p>
<p><br/></p>
<p>1st release: Sept 25th, Y2K</p>
<p>2nd release: Jan &nbsp;27th, 2K3</p>
<p>3rd release: Feb &nbsp; 4th, 2K3</p>
<p>4th release: Feb &nbsp;19th, 2K3</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p> This document describes the low-level operation and technical details of the 2C02, the NES's PPU. In general, it contains important information in regards to PPU timing, which no NES coder/emulator author should be without. This document assumes that you already understand the basics of how the PPU works, like how the playfield/object images are generated, and the behaviour of scroll/address counters during playfield rendering.</p>
<p><br></p>
<p><br/></p>
<p> Alot of the concepts behind how the PPU works described here have been extracted from Nintendo's patent documentation (U.S.#4,824,106). With block diagrams of the PPU's architecture (and even some schematics), these papers will definetely aid in the comprehension of this complex device.</p>
<p><br></p>
<p><br/></p>
<p> Since the first release, this document has been given a major overhaul. Most sections of the document have been reworked, and new information has been added just about everywhere. If you've read the old version of this document before, I recommend that you read this new one in it's entirity; there's new information even in sections which may look like they haven't changed much.</p>
<p><br></p>
<p><br/></p>
<p> Topics discussed hereon are as follows.</p>
<p><br></p>
<p><br/></p>
<p> - Video signal generation</p>
<p> - PPU base timing</p>
<p> - Miscellanious PPU info</p>
@ -84,269 +84,269 @@
<p> - The MMC3's scanline counter</p>
<p> - PPU pixel priority quirk</p>
<p> - Graphical enhancements</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p>+-------+</p>
<p>|History|</p>
<p>+-------+</p>
<p> On the weekend of Sept. 25th, Y2K, I setup an experiment with my NTSC NES MB &amp; my PC so's I could RE the PPU's timing. What I did was (using a PC interface) analyse the changes that occur on the PPU's address and data pins on every rising &amp; falling edge of the PPU's clock. I was not planning on removing the PPU from the motherboard (yet), so basically I just kept everything intact (minus the stuff I added onto the MB so I could monitor the PPU's signals), and popped in a game, so that it would initialize the PPU for me (I used DK classics, since it was only taking somthing like 4 frames before it was turning on the background/sprites).</p>
<p><br></p>
<p><br/></p>
<p> The only change I made was taking out the 21 MHz clock generator circuitry. To replace the clock signal, I connected a port controlled latch to the NES's main clock line instead. Now, by writing a 0 or a 1 out to an PC ISA port of my choice (I was using $104), I was able to control the 21 MHz clockline of the NES. After I would create a rise or a fall on the NES's clock line, I would then read in the data that appeared on the PPU's address and data pins, which included monitoring what PPU registers the game read/wrote to (&amp; the data that was read/written).</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p>+-----------------------+</p>
<p>|Video signal generation|</p>
<p>+-----------------------+</p>
<p> A 21.48 MHz clock signal is fed into the PPU. This is the NES's main clock line, which is shared by the CPU.</p>
<p><br></p>
<p><br/></p>
<p> Inside the PPU, the 21.48 MHz signal is used to clock a three-stage Johnson counter. The complimentery outputs of both master and slave portions of each stage are used to form 12 mutually exclusive output phases- all 3.58 MHz each (the NTSC colorburst). These 12 different phases form the basis of all color generation for the PPU's composite video output.</p>
<p><br></p>
<p><br/></p>
<p> Naturally, when the user programs the lower 4-bits of a palette register, they are essentially selecting any 1 of 12 phases to be routed to the PPU's video out pin (this corresponds to chrominance (tint/hue) video information) when the appropriate pixel indexes it. Other chrominance combinations (0 &amp; 13) are simply hardwired to a 1 or 0 to generate grayscale pixels.</p>
<p><br></p>
<p><br/></p>
<p> Bits 4 &amp; 5 of a palette entry selects 1 of 4 linear DC voltage offsets to apply to the selected chrominance signal (this corresponds to luminance (brightness) video information) for a pixel.</p>
<p><br></p>
<p><br/></p>
<p> Chrominance values 14 &amp; 15 yield a black pixel color, regardless of any luminance value setting. </p>
<p><br></p>
<p><br/></p>
<p> Luminance value 0, mixed with chrominance value 13 yield a "blacker than black" pixel color. This super black pixel has an output voltage level close to the vertical/horizontal syncronization pulses. Because of this, some video monitors will display warped/distorted screens for games which use this color for black (Game Genie is the best example of this). Essentially what is happening is the video monitor's horizontal timing is compromised by what it thinks are extra syncronization pulses in the scanline. This is not damaging to the monitors which are effected by it, but use of the super black color should be avoided, due to the graphical distortion it causes.</p>
<p><br></p>
<p><br/></p>
<p> The amplitude of the selected chrominance signal (via the 4 lower bits of a palette register) remain constant regardless of bits 4 or 5. Thus it is not possible to adjust the saturation level of a particular color.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p>+---------------+</p>
<p>|PPU base timing|</p>
<p>+---------------+</p>
<p> Other than the 3-stage Johnson counter, the 21.48 MHz signal is not used directly by any other PPU hardware. Instead, the signal is divided by 4 to get 5.37 MHz, and is used as the smallest unit of timing in the PPU. All following references to PPU clock cycle (abbr. "cc") timing in this document will be in respect to this timing base, unless otherwise indicated.</p>
<p><br></p>
<p><br/></p>
<p> - Pixels are rendered at the same rate as the base PPU clock. In other words, 1 clock cycle= 1 pixel.</p>
<p><br></p>
<p><br/></p>
<p> - 341 PPU cc's make up the time of a typical scanline (or 341/3 CPU cc's).</p>
<p><br></p>
<p><br/></p>
<p> - One frame consists of 262 scanlines. This equals 341*262 PPU cc's per frame (divide by 3 for # of CPU cc's).</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p>+------------------------+</p>
<p>|PPU memory access cycles|</p>
<p>+------------------------+</p>
<p> All PPU memory access cycles are 2 clocks long, and can be made back-to-back (typically done during rendering). Here's how the access breaks down:</p>
<p><br></p>
<p><br/></p>
<p> At the beginning of the access cycle, PPU address lines 8..13 are updated with the target address. This data remains here until the next time an access cycle occurs.</p>
<p><br></p>
<p><br/></p>
<p> The lower 8-bits of the PPU address lines are multiplexed with the data bus, to reduce the PPU's pin count. On the first clock cycle of the access, A0..A7 are put on the PPU's data bus, and the ALE (address latch enable) line is activated for the first half of the cycle. This loads the lower 8-bit address into an external 8-bit transparent latch strobed by ALE (74LS373 is used).</p>
<p><br></p>
<p><br/></p>
<p> On the second clock cycle, the /RD (or /WR) line is activated, and stays active for the entire cycle. Appropriate data is driven onto the bus during this time.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p>+----------------------+</p>
<p>|Miscellanious PPU info|</p>
<p>+----------------------+</p>
<p> - Sprite DMA is 1536 clock cycles long (512 CPU cc's). 256 individual transfers are made from CPU memory to a temp register inside the CPU, then from the CPU's temp reg, to $2004.</p>
<p><br></p>
<p><br/></p>
<p> - The PPU makes NO external access to the PPU bus, unless the playfield or objects are enabled during a scanline outside vblank. This means that the PPU's address and data busses are dead while in this state.</p>
<p><br></p>
<p><br/></p>
<p> - palette RAM is accessed internally during playfield rendering (i.e., the palette address/data is never put on the PPU bus during this time). Additionally, when the programmer accesses palette RAM via $2006/7, the palette address accessed actually does show up on the PPU address bus, but the PPU's /RD &amp; /WR flags are not activated. This is required; to prevent writing over name table data falling under the approprite mirrored area (since the name table RAM's address decoder simply consists of an inverter connected to the A13 line- effectively decoding all addresses in $2000-$3FFF).</p>
<p><br></p>
<p><br/></p>
<p> - the VINT impulse (NMI) and bit $2002.7 are set simultaniously. Reading $2002 will reset bit 7, but it seems that the VINT flag goes down on it's own. Because of this, when the PPU generates a VINT, it doesn't require any acknowledgement whatsoever; it will continue firing off VINTs, regardless of inservice to $2002. The only way to stop VINTs is to clear $2000.7.</p>
<p><br></p>
<p><br/></p>
<p> - Because the PPU cannot make a read from PPU memory immediately upon request (via $2007), there is an internal buffer, which acts as a 1-stage data pipeline. As a read is requested, the contents of the read buffer are returned to the NES's CPU. After this, at the PPU's earliest convience (according to PPU read cycle timings), the PPU will fetch the requested data from the PPU memory, and throw it in the read buffer. Writes to PPU mem via $2007 are pipelined as well, but it is unknown to me if the PPU uses this same buffer (this could be easily tested by writing somthing to $2007, and seeing if the same value is returned immediately after reading).</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p>+-----------------------+</p>
<p>|Frame rendering details|</p>
<p>+-----------------------+</p>
<p> &nbsp;The following describes the PPU's status during all 262 scanlines of a frame. Any scanlines where work is done (like image rendering), consists of the steps which will be described in the next section.</p>
<p><br></p>
<p><br/></p>
<p> 0..19: &nbsp; &nbsp; &nbsp; &nbsp;Starting at the instant the VINT flag is pulled down (when a NMI is generated), 20 scanlines make up the period of time on the PPU which I like to call the VINT period. During this time, the PPU makes no access to it's external memory (i.e. name / pattern tables, etc.).</p>
<p><br></p>
<p><br/></p>
<p> 20: &nbsp; &nbsp; &nbsp; &nbsp;After 20 scanlines worth of time go by (since the VINT flag was set), the PPU starts to render scanlines. This first scanline is a dummy one; although it will access it's external memory in the same sequence it would for drawing a valid scanline, no on-screen pixels are rendered during this time, making the fetched background data immaterial. Both horizontal *and* vertical scroll counters are updated (presumably) at cc offset 256 in this scanline. Other than that, the operation of this scanline is identical to any other. The primary reason this scanline exists is to start the object render pipeline, since it takes 256 cc's worth of time to determine which objects are in range or not for any particular scanline.</p>
<p><br></p>
<p><br/></p>
<p> 21..260: after rendering 1 dummy scanline, the PPU starts to render the actual data to be displayed on the screen. This is done for 240 scanlines, of course.</p>
<p><br></p>
<p><br/></p>
<p> 261: &nbsp; &nbsp; &nbsp; &nbsp;after the very last rendered scanline finishes, the PPU does nothing for 1 scanline (i.e. the programmer gets screwed out of perfectly good VINT time). When this scanline finishes, the VINT flag is set, and the process of drawing lines starts all over again.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p>+--------------------------+</p>
<p>|Scanline rendering details|</p>
<p>+--------------------------+</p>
<p> Naturally, the PPU will fetch data from name, attribute, and pattern tables during a scanline to produce an image on the screen. This section details the PPU's doings during this time.</p>
<p><br></p>
<p><br/></p>
<p> As explained before, external PPU memory can be accessed every 2 cc's. With 341 cc's per scanline, this gives the PPU enough time to make 170 memory accesses per scanline (and it uses all of them!). After the 170th fetch, the PPU does nothing for 1 clock cycle. Remember that a single pixel is rendered every clock cycle.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p> Memory fetch phase 1 thru 128</p>
<p> -----------------------------</p>
<p> 1. Name table byte</p>
<p> 2. Attribute table byte</p>
<p> 3. Pattern table bitmap #0</p>
<p> 4. Pattern table bitmap #1</p>
<p><br></p>
<p><br/></p>
<p> This process is repeated 32 times (32 tiles in a scanline).</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p> This is when the PPU retrieves the appropriate data from PPU memory for rendering the playfield. The first playfield tile fetched here is actually the 3rd to be drawn on the screen (the playfield data for the first 2 tiles to be rendered on this scanline are fetched at the end of the scanline prior to this one).</p>
<p><br></p>
<p><br/></p>
<p> All valid on-screen pixel data arrives at the PPU's video out pin during this time (256 clocks). For determining the precise delay between when a tile's bitmap fetch phase starts (the whole 4 memory fetches), and when the first pixel of that tile's bitmap data hits the video out pin, the formula is (16-n) clock cycles, where n is the fine horizontal scroll offset (0..7 pixels). This information is relivant for understanding the exact timing operation of the "object 0 collision" flag.</p>
<p><br></p>
<p><br/></p>
<p> Note that the PPU fetches an attribute table byte for every 8 sequential horizontal pixels it draws. This essentially limits the PPU's color area (the area of pixels which are forced to use the same 3-color palette) to only 8 horizontally sequential pixels.</p>
<p><br></p>
<p><br/></p>
<p> It is also during this time that the PPU evaluates the "Y coordinate" entries of all 64 objects in object attribute RAM (OAM), to see if the objects are within range (to be drawn on the screen) for the *next* scanline (this is why Y-coordinate entries in the OAM must be programmed to a value 1 less than the scanline the object is to appear on). Each evaluation (presumably) takes 4 clock cycles, for a total of 256 (which is why it's done during on-screen pixel rendering).</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p> In-range object evaluation</p>
<p> --------------------------</p>
<p> An 8-bit comparator is used to calculate the 9-bit difference between the current scanline (minus 21), and each Y-coordinate (plus 1) of every object entry in the OAM. Objects are considered in range if the comparator produces a difference in the range of 0..7 (if $2000.5 currently = 0), or 0..15 (if $2000.5 currently = 1).</p>
<p><br></p>
<p><br/></p>
<p> (Note that a 9-bit comparison result is generated. This means that setting object scanline coordinates for ranges -1..-15 are actually interpreted as ranges 241..255. For this reason, objects with these ranges will never be considered to be part of any on-screen scanline range, and will not allow smooth object scrolling off the top of the screen.)</p>
<p><br></p>
<p><br/></p>
<p> Tile index (8 bits), X-coordinate (8 bits), &amp; attribute information (4 bits; vertical inversion is excluded) from the in-range OAM element, plus the associated 4-bit result of the range comparison accumulate in a part of the PPU called the "sprite temporary memory". Logical inversion is applied to the loaded 4-bit range comparison result, if the object's vertical inversion attribute bit is set.</p>
<p><br></p>
<p><br/></p>
<p> Since object range evaluations occur sequentially through the OAM (starting from entry 0 to 63), the sprite temporary memory always fills in order from the highest priority in-range object, to lower ones. A 4-bit "in-range" counter is used to determine the number of found objects on the scanline (from 0 up to 8), and serves as an index pointer for placement of found object data into the 8-element sprite temporary memory. The counter is reset at the beginning of the object evaluation phase, and is post-incremented everytime an object is found in-range. This occurs until the counter equals 8, when found object data after this is discarded, and a flag (bit 5 of $2002) is raised, indicating that it is going to be dropping objects for the next scanline.</p>
<p><br></p>
<p><br/></p>
<p> An additional memory bit associated with the sprite temporary memory is used to indicate that the primary object (#0) was found to be in range. This will be used later on to detect primary object-to-playfield pixel collisions.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p> Playfield render pipeline details</p>
<p> ---------------------------------</p>
<p> As pattern table &amp; palette select data is fetched, it is loaded into internal latches (the palette select data is selected from the fetched byte via a 2-bit 1-of-4 selector).</p>
<p><br></p>
<p><br/></p>
<p> At the start of a new tile fetch phase (every 8 cc's), both latched pattern table bitmaps are loaded into the upper 8-bits of 2- 16-bit shift registers (which both shift right every clock cycle). The palette select data is also transfered into another latch during this time (which feeds the serial inputs of 2 8-bit right shift registers shifted every clock). The pixel data is fed into these extra shift registers in order to implement fine horizontal scrolling, since the periods when the PPU fetch tile data is fixed.</p>
<p><br></p>
<p><br/></p>
<p> A single bit from each shift register is selected, to form the valid 4-bit playfield pixel for the current clock cycle. The bit selection offset is based on the fine horizontal scroll value (this selects bit positions 0..7 for all 4 shift registers). The selected 4-bit pixel data will then be fed into the multiplexer (described later) to be mixed with object data.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p> Memory fetch phase 129 thru 160</p>
<p> -------------------------------</p>
<p> 1. Garbage name table byte</p>
<p> 2. Garbage name table byte</p>
<p> 3. Pattern table bitmap #0 for applicable object (for next scanline)</p>
<p> 4. Pattern table bitmap #1 for applicable object (for next scanline)</p>
<p><br></p>
<p><br/></p>
<p> This process is repeated 8 times.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p> This is the period of time when the PPU retrieves the appropriate pattern table data for the objects to be drawn on the *next* scanline. When less than 8 objects exist on the next scanline (as the in-range object evaluation counter indicates), dummy pattern table fetches take place for the remaining fetches. Internally, the fetched dummy-data is discarded, and replaced with completely transparent bitmap patterns).</p>
<p><br></p>
<p><br/></p>
<p> Although the fetched name table data is thrown away, and the name table address is somewhat unpredictable, the address does seem to relate to the first name table tile to be fetched for the next scanline. This would seem to imply that PPU cc #256 is when the PPU's scroll/address counters have their horizontal scroll values automatically updated.</p>
<p><br></p>
<p><br/></p>
<p> It should also be noted that because this fetch is required for objects on the next scanline, it is neccessary for a garbage scanline to exist prior to the very first scanline to be actually rendered, so that object attribute RAM entries can be evaluated, and the appropriate bitmap data retrieved.</p>
<p><br></p>
<p><br/></p>
<p> As far as the wasted fetch phases here, well, what can I say. Either Nintendo's engineers were VERY lazy, and didn't want to add the small amount of extra circuitry to the PPU so that 16 object fetches could take place per scanline, or Nintendo couldn't spot the extra memory required to implement 16 object scanlines. Thing is though- between the object attribute mem, sprite temporary &amp; buffer mem, and palette mem, that's already 2406 bits of RAM; I don't think it would've killed them to just add the 408 bits it would've took for an extra 8 objects, which would've made games with horrible OAM cycling (Double Dragon 2 w/ 2 players) look half-decent (hell, with 16 object scanlines, games would hardly even need OAM cycling).</p>
<p><br></p>
<p><br/></p>
<p> </p>
<p> Details of object pattern fetch &amp; render</p>
<p> ----------------------------------------</p>
<p> Where the PPU fetches pattern table data for an individual object is conditioned on the contents of the sprite temporary memory element, and $2000.5. If $2000.5 = 0, the tile index data is used as usual, and $2000.3 selects the pattern table to use. If $2000.5 = 1, the MSB of the range result value become the LSB of the indexed tile, and the LSB of the tile index value determines pattern table selection. The lower 3 bits of the range result value are always used as the fine vertical offset into the selected pattern.</p>
<p><br></p>
<p><br/></p>
<p> Horizontal inversion (bit order reversing) is applied to fetched bitmaps, if indicated in the sprite temporary memory element.</p>
<p><br></p>
<p><br/></p>
<p> The fetched pattern table data (which is 2 bytes), plus the associated 3 attribute bits (palette select &amp; priority), and the x coordinate byte in sprite temporary memory are then loaded into a part of the PPU called the "sprite buffer memory" (the primary object present bit is also copied). This memory area again, is large enough to hold the contents for 8 sprites.</p>
<p><br></p>
<p><br/></p>
<p> The composition of one sprite buffer element here is: 2 8-bit shift registers (the fetched pattern table data is loaded in here, where it will be serialized at the appropriate time), a 3-bit latch (which holds the color &amp; priority data for an object), and an 8-bit down counter (this is where the x coordinate is loaded).</p>
<p><br></p>
<p><br/></p>
<p> The counter is decremented every time the PPU renders a pixel (the first 256 cc's of a scanline; see "Memory fetch phase 1 thru 128" above). When the counter equals 0, the pattern table data in the shift registers will start to serialize (1 shift per clock). Before this time, or 8 clocks after, consider the outputs of the serializers for each stage to be 0 (transparency).</p>
<p><br></p>
<p><br/></p>
<p> The streams of all 8 object serializers are prioritized, and ultimately only one stream (with palette select &amp; priority information) is selected for output to the multiplexer (where object &amp; playfield pixels are prioritized).</p>
<p><br></p>
<p><br/></p>
<p> The data for the first sprite buffer entry (including the primary object present flag) has the first chance to enter the multiplexer, if it's output pixel is non-transparent (non-zero). Otherwise, priority is passed to the next serializer in the sprite buffer memory, and the test for non-transparency is made again (the primary object present status will always be passed to the multiplexer as false in this case). This is done until the last (8th) stage is reached, when the object data is passed through unconditionally. Keep in mind that this whole process occurs every clock cycle (hardware is used to determine priority instantly).</p>
<p><br></p>
<p><br/></p>
<p> The multiplexer does 2 things: determines primary object collisions, and decides which pixel data to pass through to index the palette RAM- either the playfield's or the object's.</p>
<p><br></p>
<p><br/></p>
<p> Primary object collisions occur when a non-transparent playfield pixel coincides with a non-transparent object pixel, while the primary object present status entering the multiplexer for the current clock cycle is true. This causes a flip-flop ($2002.6) to be set, and remains set (presumably) some time after the VINT occurence (prehaps up until scanline 20?).</p>
<p><br></p>
<p><br/></p>
<p> The decision for selecting the data to pass through to the palette index is made rather easilly. The condition to use object (opposed to playfield) data is:</p>
<p><br></p>
<p><br/></p>
<p> (OBJpri=foreground OR PFpixel=xparent) AND OBJpixel&lt;&gt;xparent</p>
<p><br></p>
<p><br/></p>
<p> Since the PPU has 2 palettes; one for objects, and one for playfield, the appropriate palette will be selected depending on which pixel data is passed through.</p>
<p><br></p>
<p><br/></p>
<p> After the palette look-up, the operation of events follows the aforementioned steps in the "video signal generation" section.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p> Memory fetch phase 161 thru 168</p>
<p> -------------------------------</p>
<p> 1. Name table byte</p>
<p> 2. Attribute table byte</p>
<p> 3. Pattern table bitmap #0 (for next scanline)</p>
<p> 4. Pattern table bitmap #1 (for next scanline)</p>
<p><br></p>
<p><br/></p>
<p> This process is repeated 2 times.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p> It is during this time that the PPU fetches the appliciable playfield data for the first and second tiles to be rendered on the screen for the *next* scanline. These fetches initialize the internal playfield pixel pipelines (2- 16-bit shift registers) with valid bitmap data. The rest of tiles (3..32) are fetched at the beginning of the following scanline.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p> Memory fetch phase 169 thru 170</p>
<p> -------------------------------</p>
<p> 1. Name table byte</p>
<p> 2. Name table byte</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p> I'm unclear of the reason why this particular access to memory is made. The name table address that is accessed 2 times in a row here, is also the same nametable address that points to the 3rd tile to be rendered on the screen (or basically, the first name table address that will be accessed when the PPU is fetching playfield data on the next scanline).</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p> After memory access 170</p>
<p> -----------------------</p>
<p> The PPU simply rests for 1 cycle here (or the equivelant of half a memory access cycle) before repeating the whole pixel/scanline rendering process.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p>+------------------+</p>
<p>|Extra cycle frames|</p>
<p>+------------------+</p>
<p> Scanline 20 is the only scanline that has variable length. On every odd frame, this scanline is only 340 cycles (the dead cycle at the end is removed). This is done to cause a shift in the NTSC colorburst phase.</p>
<p><br></p>
<p><br/></p>
<p> You see, a 3.58 MHz signal, the NTSC colorburst, is required to be modulated into a luminance carrying signal in order for color to be generated on an NTSC monitor. Since the PPU's video out consists of basically square waves (as opposed to sine waves, which would be preferred), it takes an entire colorburst cycle (1/3.58 MHz) for an NTSC monitor to identify the color of a PPU pixel accurately.</p>
<p><br></p>
<p><br/></p>
<p> But now you remember that the PPU renders pixels at 5.37 MHz- 1.5x the rate of the colorburst. This means that if a single pixel resides on a scanline with a color different to those surrounding it, the pixel will probably be misrepresented on the screen, sometimes appearing faintly.</p>
<p><br></p>
<p><br/></p>
<p> Well, to somewhat fix this problem, they added this extra pixel into every odd frame (shifting the colorburst phase over a bit), and changing the way the monitor interprets isolated colored pixels each frame. This is why when you play games with detailed background graphics, the background seems to flicker a bit. Once you start scrolling the screen however, it seems as if some pixels become invisible; this is how stationary PPU images would look without this cycle removed from odd frames.</p>
<p><br></p>
<p><br/></p>
<p> Certain scroll rates expose this NTSC PPU color caveat regardless of the toggling phase shift. Some of Zelda 2's dungeon backgrounds are a good place to see this effect.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p>+---------------------------+</p>
<p>|The MMC3's scanline counter|</p>
<p>+---------------------------+</p>
<p> As most people know, the MMC3 bases it's scanline counter on PPU address line A13 (which is why IRQ's can be fired off manually by toggling A13 a bunch of times via $2006). What's not common knowledge is the number of times A13 is expected to toggle in a scanline (although if you've been paying close attention to the doc here, you should already know ;)</p>
<p><br></p>
<p><br/></p>
<p> A13 was probably used for the IRQ counter (as opposed to using the PPU's /READ line) because this address line already needed to be connected to the MMC for bankswitching purposes (so in other words, to reduce the MMC3's pin count by 1). They also probably used this method of counting (as opposed to a CPU cycle counter) since A13 cycles (0 -&gt; 1) exactly 42 times per scanline, whereas the CPU count of cycles per scanline is not an exact integer (113.67). Having said that, I guess Nintendo wanted to provide an "easy-to-use" method of generating special image effects, without making programmers have to figure out how many clock cycles to program an IRQ counter with (a pretty lame excuse for not providing an IRQ counter with CPU clock cycle precision (which would have been more useful and versatile)).</p>
<p><br></p>
<p><br/></p>
<p> Regardless of any values PPU registers are programmed with, A13 will operate in a predictable fashion during image rendering (and if you understand how PPU addressing works, you should understand that A13 is the *only* address line with fixed behaviour during image rendering).</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p>+------------------------+</p>
<p>|PPU pixel priority quirk|</p>
<p>+------------------------+</p>
<p> Object data is prioritized between itself, then prioritized between the playfield. There are some odd side effects to this scheme of rendering, however. For instance, imagine a low priority object pixel with foreground priority, a high priority object pixel with background priority, and a playfield pixel all coinciding (all non-transparent).</p>
<p><br></p>
<p><br/></p>
<p> Ideally, the playfield is considered to be the middle layer between background and foreground priority objects. This means that the playfield pixel should hide the background priority object pixel (regardless of object priority), and the foreground priority object should appear atop the PF pixel.</p>
<p><br></p>
<p><br/></p>
<p> However, because of the way the PPU renders (as just described), OBJ priority is evaluated first, and therefore the background object pixel wins, which means that you'll only be seeing the PF pixel after this mess.</p>
<p><br></p>
<p><br/></p>
<p> A good game to demonstrate this behaviour is Megaman 2. Go into airman's stage. First, jump into the energy bar, just to confirm that megaman's sprite is of a higher priority than the energy bar's. Now, get to the second half of the stage, where the clouds cover the energy bar. The energy bar will be ontop of the clouds, but megaman will be behind them. Now, look what happens when you jump into the energy bar here... you see the clouds where megaman underlaps the energy bar.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p>+----------------------+</p>
<p>|Graphical enhancements|</p>
<p>+----------------------+</p>
<p> Since an NES cartridge has access to the PPU bus, any number of on-cart hardware schemes can be used to enhance the graphic capabilities of the NES. After all, the PPU's playfield pipeline is very simple: it fetches 272 playfield pixels per scanline (as 34*2 byte fetches, in real-time), and outputs 256 of them to the screen (with the 0..7 pixel offset determined by the fine X scroll register), along with object data combined with it.</p>
<p><br></p>
<p><br/></p>
<p> Essentially, you can bypass the PPU's simple scrolling system, implement a custom one on your cart (fetching bitmap data in your own fashion), and feed the PPU bitmap data in your own order.</p>
<p><br></p>
<p><br/></p>
<p> The possibilities of this are endless (like sporting multiple playfields, or even playfield rotation/scaling), but of course what it comes down to is the amount of cartridge hardware required.</p>
<p><br></p>
<p><br/></p>
<p> Generally, playfield rotation/scaling can be done quite easily- it only requires a few sets of 16-bit registers and adders (the 16 bits are broken up into 8.8 fixed point values). But this kind of implementation is more suited for an integrated circuit, since this would require dozens of discrete logic chips.</p>
<p><br></p>
<p><br/></p>
<p> Multiple playfields are another thing which could be easily done. The caveat here is that pixel pipelines (i.e., shift registers) and a multiplexer would have to be implemented on the cart (not to mention exclusive name table RAM) in order to process the playfield bitmaps from multiple sources. The access to the CHR-ROM/RAM would also have to increased- but as it stands, the CHR-ROM/RAM bandwidth is 1.34 MHz, a rather low frequency. With a memory device capable of a 10.74 MHz bandwith, you could have 8 playfields to work with. Generally, this would be very useful for displaying multiple huge objects on the screen- without ever having to worry about annoying flicker.</p>
<p><br></p>
<p><br/></p>
<p> The only restriction to doing any of this is that:</p>
<p><br></p>
<p><br/></p>
<p> - every 8 sequential horizontal pixels sent to the PPU must share the same palette select value. Because of this, hardware would have to be implemented to decide which palette select value to feed the PPU between 8 horizontally sequential pixels, if they do not all share the same palette select value. The on-screen results of this may not be too flattering sometimes, but this is a small price to pay to do some neat graphical tricks on the NES.</p>
<p><br></p>
<p><br/></p>
<p> -only the playfield palette can be used. As usual, this pretty much limits your randomly accessable colors to about 12+1.</p>
<p><br></p>
<p><br/></p>
<p> It's a damn shame that Nintendo never created a MMC which would enhance graphics on the NES in useful ways as mentioned above. The MMC5 was the only device that came close, and it's only selling features were the single-tile color area, and the vertical split screen mode (which I don't think any game ever used). Considering the amount of pins (100) the MMC5 had, and number of gates they put in it just for the EXRAM (which was 1K bytes), they could've put some really useful graphics hardware inside there instead.</p>
<p><br></p>
<p><br/></p>
<p> Prehaps the infamous Color Dreams "Hellraiser" cart was the closest the NES ever came to seeing such sophisticated graphics. The cart was never released, but from what I've read, it was going to use some sort of frame buffer, and a Z80 CPU to do the graphical rendering. It had been rumored that the game had 3D graphics (or at least 2.5D) in it. If so (and the game was actually good), prehaps it would have raised a few eyebrows in the industry, and inspired Nintendo to develop a new MMC chip with similar capabilities, in order to keep the NES in it's profit margin for another few years (and allow it to compete somewhat with the more advanced systems of the time).</p>
<p><br></p>
<p><br/></p>
<p>EOF</p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour">Easily create CHM Help documents</a></p>
</div>

View File

@ -3,7 +3,7 @@
<head>
<title>PPU Viewer</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -53,23 +53,23 @@
<div id="topic_content">
<p><span class="rvts17">PPU Viewer</span></p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts12">Introduction</span></p>
<p><br></p>
<p><br/></p>
<p>The NES architecture includes a 6502 CPU as well as a custom video controller known as a PPU (Picture Processing Unit). &nbsp;The PPU's video memory is separated from the main CPU memory and can be read/written via special ports (see <a class="rvts18" href="PPU.html">PPU Memory</a>).</p>
<p><br></p>
<p><br/></p>
<p>The PPU viewer will display the contents of the current PPU memory. &nbsp;(It does not alter game data in anyway). &nbsp;</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts16">Using PPU Viewer</span></p>
<p><br></p>
<p><br/></p>
<p><span class="rvts10">Show on Scanline</span></p>
<p>This options makes it show what the PPU looks like when the screen is drawing that scanline. &nbsp;It is useful for games like SMB, that swap pattern </p>
<p>tables mid-frame (status bar stuff).</p>
<p><br></p>
<p><br/></p>
<p>Right clicking on one of the PPU panels cycles the palettes it is shown with, though pattern palettes and then sprite ones</p>
<p>Putting the mouse cursor over a tile will display the tile address. &nbsp;Moving cursor over palette color will give palette address.</p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com">Full featured Documentation generator</a></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/create-epub-ebooks">Produce electonic books easily</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>Palette</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -53,49 +53,49 @@
<div id="topic_content">
<p><span class="rvts17">Palette</span></p>
<p><br></p>
<p><br/></p>
<p>Settings related to the emulator's color palette choices.</p>
<p><br></p>
<p><br/></p>
<p>See </p>
<p><br></p>
<p><br/></p>
<p><span class="rvts12">NES Palette</span></p>
<p><span class="rvts10"><br></span></p>
<p><span class="rvts10"><br/></span></p>
<p><span class="rvts16">Load Palette</span></p>
<p>Allows you to load a custom color palette (.pal) file to use for the current game loaded.</p>
<p><br></p>
<p><br/></p>
<p>A note on on the format of external palettes; Palette files are expected to contain 64 8-bit RGB triplets(each in that order; red comes first in the triplet in the file, then green, then blue). Each 8-bit value represents brightness for that particular color. 0 is minimum, 255 is maximum.</p>
<p><br></p>
<p><br/></p>
<p>Palettes can be set on a per-game basis. To do this, put a palette file in the same directory the game is in, and add the extension "pal". Examples:</p>
<p><br></p>
<p><br/></p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;File name: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Palette file name:</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; BigBad.nes &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; BigBad.pal</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; BigBad.zip &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;BigBad.pal</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; BigBad.Better.nes &nbsp; BigBad.Better.pal</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p>With so many ways to choose a palette, figuring out which one will be active may be difficult. Here's a list of what palettes will be used, in order from highest priority to least priority(if a condition doesn't exist for a higher priority palette, the emulator will continue down its list of palettes).</p>
<p><br></p>
<p><br/></p>
<p> &nbsp; &nbsp;* NSF Palette(for NSFs only)</p>
<p> &nbsp; &nbsp;* Palette loaded from the "gameinfo" directory.</p>
<p> &nbsp; &nbsp;* NTSC Color Emulation(only for NTSC NES games).</p>
<p> &nbsp; &nbsp;* VS Unisystem palette(if the game is a VS Unisystem game and a palette is available).</p>
<p> &nbsp; &nbsp;* Custom global palette.</p>
<p> &nbsp; &nbsp;* Default NES palette.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts16">Restore to Default Palette</span></p>
<p>Restores the color palette to its default settings.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts28">NTSC Color Emulation</span></p>
<p><br></p>
<p><br/></p>
<p>If enabled, FCEUX will simulate actual NTSC signal processing. &nbsp;The result should be the actual colors you would see if outputting to an actual NTSC television.</p>
<p><br></p>
<p><br/></p>
<p>The Tint and Hue knobs can be used to make adjustments to the resulting color change.</p>
<p><br></p>
<p><br></p>
<p><br></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com">Free PDF documentation generator</a></p>
<p><br/></p>
<p><br/></p>
<p><br/></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com">Free CHM Help documentation generator</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>Palette Options</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -53,34 +53,34 @@
<div id="topic_content">
<p><span class="rvts17">Palette Options</span></p>
<p><br></p>
<p><br/></p>
<p>FCEUX comes packaged with several palette files. &nbsp;This page describes details for each one.</p>
<p><br></p>
<p><br/></p>
<p>To load a palette file, see <a class="rvts18" href="Palette.html">Palette config</a>.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts10">FCEUX.pal</span></p>
<p><br></p>
<p><br/></p>
<p>This is the default palette that FCEUX uses. It is the same palette used in FCEU.12 or earlier, and FCEUD/FCEUXD,FCEUXDSP.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts10">FCEU-13-default_nitsuja.pal</span></p>
<p><br></p>
<p><br/></p>
<p>This is the palette added to FCEU.13 rerecording by Nitsuja.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts10">FCEU-15-nitsuja-new.pal</span></p>
<p><br></p>
<p><br/></p>
<p>This is the palette added to FCEU.15 rerecording by Nitsuja. &nbsp;It is a slight adjustment to the FCEU.13 palette.</p>
<p>This one most closely resembles the default palette of Nestopia.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts10">ASQ_realityA.pal &amp; ASQ_realityB.pal</span></p>
<p><br></p>
<p><br/></p>
<p>BMF palettes had some flaws. &nbsp;AspiringSquire tweaked BMF's palettes and came up with this. &nbsp;They fix issues mostly related to brightness.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts10">BMF_final2.pal &amp; BMF_final3.pal</span></p>
<p><br></p>
<p><br/></p>
<p>These palettes were designed by BMF. &nbsp;He customized these by looking at snapshots of his television screen and attempting to replicate them as close as possible.</p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com">Easy CHM and documentation editor</a></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com">Full featured Documentation generator</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>RAM Search</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -53,18 +53,18 @@
<div id="topic_content">
<p><span class="rvts17">Ram Search</span></p>
<p><br></p>
<p><br/></p>
<p>Ram Search is a tool originally written for <a class="rvts18" href="http://code.google.com/p/gens-rerecording/" target="_blank">GENS rerecording</a>. &nbsp;It was ported to FCEUX in version 2.1.2. &nbsp;This dialog has also been ported to <a class="rvts18" href="http://code.google.com/p/snes9x-rr/" target="_blank">SNES9x-rr</a>, <a class="rvts18" href="http://desmume.org/" target="_blank">Desmume</a>, <a class="rvts18" href="http://code.google.com/p/pcejin/" target="_blank">PCEjin</a>, <a class="rvts18" href="http://code.google.com/p/vba-rerecording/" target="_blank">VBA-rr</a>, <a class="rvts18" href="http://code.google.com/p/pcsxrr/" target="_blank">PCSX-rr</a>, <a class="rvts18" href="http://code.google.com/p/yabause-rr/" target="_blank">Yabause</a>, <a class="rvts18" href="http://code.google.com/p/vbjin/">VBjin</a>, and <a class="rvts18" href="http://code.google.com/p/fbarr/" target="_blank">FBA-rr</a>.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p>It is designed to filter ram values just like in the <a class="rvts18" href="CheatSearch.html">Cheat Search</a> dialog. &nbsp;However, it features many options that are lacking in the Cheat Search dialog. &nbsp;Among these are search undo, search preview, a modulus filter, a data size option, signed/unsigned/hex options, autosearch, and several more compare by options.</p>
<p><br></p>
<p><br/></p>
<p>Documentation on this dialog can be found on TASVideos <a class="rvts18" href="http://tasvideos.org/EmulatorResources/RamSearch.html" target="_blank">here</a>.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts42">Hotkeys</span></p>
<p><br></p>
<p><br/></p>
<p><a class="rvts18" href="MapHotkeys.html">Hotkeys</a> can be assigned to common search commands so they can be easily selected while in the main window.</p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/help-authoring-tool">Free help authoring tool</a></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com">Free HTML Help documentation generator</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>RAM Watch</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -53,11 +53,11 @@
<div id="topic_content">
<p><span class="rvts17">Ram Watch</span></p>
<p><br></p>
<p><br/></p>
<p>Ram Watch is a tool originally written for <a class="rvts18" href="http://code.google.com/p/gens-rerecording/" target="_blank">GENS rerecording</a>. &nbsp;It was ported to FCEUX in version 2.1.2. &nbsp;This dialog has also been ported to <a class="rvts18" href="http://code.google.com/p/snes9x-rr/" target="_blank">SNES9x-rr</a>, <a class="rvts18" href="http://desmume.org/" target="_blank">Desmume</a>, <a class="rvts18" href="http://code.google.com/p/pcejin/" target="_blank">PCEjin</a>, <a class="rvts18" href="http://code.google.com/p/vba-rerecording/" target="_blank">VBA-rr</a>, <a class="rvts18" href="http://code.google.com/p/pcsxrr/" target="_blank">PCSX-rr</a>, <a class="rvts18" href="http://code.google.com/p/yabause-rr/" target="_blank">Yabause</a>, and <a class="rvts18" href="http://code.google.com/p/fbarr/" target="_blank">FBA-rr</a>.</p>
<p><br></p>
<p><br/></p>
<p>It is designed to filter ram values just like in the <a class="rvts18" href="CheatSearch.html">Cheat Search</a> dialog. &nbsp;However, it features many options that are lacking in the Cheat Search dialog. &nbsp;Among these are search undo, search preview, a modulus filter, a data size option, signed/unsigned/hex options, autosearch, and several more compare by options.</p>
<p><br></p>
<p><br/></p>
<p>Documentation on this dialog can be found on TASVideos <a class="rvts18" href="http://tasvideos.org/EmulatorResources/RamWatch.html" target="_blank">here</a>.</p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/help-authoring-tool">Free help authoring environment</a></p>
</div>

View File

@ -3,7 +3,7 @@
<head>
<title>ROM Hacking</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -53,33 +53,33 @@
<div id="topic_content">
<p><span class="rvts17">ROM Hacking</span></p>
<p><br></p>
<p><br/></p>
<p><span class="rvts16">What is ROM Hacking?</span></p>
<p><br></p>
<p><br/></p>
<p>ROM Hacking is the process of modifying a video game ROM image to alter the game's graphics, dialogue, levels, gameplay, or other gameplay elements. This is usually done by technically-inclined video game fans to breathe new life into a cherished old game, as a creative outlet, or to make essentially new unofficial games using an old game as a foundation.</p>
<p><br></p>
<p><br/></p>
<p>ROM hacking is generally accomplished through use of a hex editor (a program for editing non-textual data) and various specialized tools such as tile editors, and game-specific tools which are generally used for editing levels, items, and the like, although more advanced tools such as assemblers and debuggers are occasionally used. Once ready, they are usually distributed on the Internet for others to play on an emulator.</p>
<p><br></p>
<p><br/></p>
<p>For more information on ROM Hacking:</p>
<p><a class="rvts18" href="http://www.gamefaqs.com/console/nes/file/916386/2948">"The ROM Hackers Bible"</a></p>
<p><a class="rvts18" href="http://nesdev.parodius.com/">Parodius - ROM Hacking Community</a></p>
<p><a class="rvts18" href="http://www.rom-hacking.net/old-site/">ROM-Hacking.net Archive</a></p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts16">FCEUX ROM-Hacking Features</span></p>
<p><br></p>
<p><br/></p>
<p>FCEUX provides a wealth of tools and resources to aid in hacking NES &amp; FDS games. &nbsp;It features the most current and cutting edge tools debugging and hacking games as well as making the process quicker an easier.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts10">Debugging / Reverse engineering:</span></p>
<p><a class="rvts18" href="Debugger.html">Debugge</a><a class="rvts18" href="Debugger.html">r</a>, <a class="rvts18" href="TraceLogger.html">Trace Logger</a>, <a class="rvts18" href="CodeDataLogger.html">Code/Data Logger</a>, <a class="rvts18" href="CheatSearch.html">Cheat Search</a>, <span class="rvts18">RAM Filter</span>, <a class="rvts18" href="MovieRecording.html">Movie Making tools/Frame Advance</a></p>
<p><br></p>
<p><br/></p>
<p><span class="rvts10">Memory &amp; PPU Viewing:</span></p>
<p><a class="rvts18" href="Debugger.html">Debugger</a>, <a class="rvts18" href="PPUViewer.html">PPU Viewer</a>, <a class="rvts18" href="HexEditor.html">Hex Editor</a>, <a class="rvts18" href="TraceLogger.html">Trace Logger</a>, <a class="rvts18" href="CodeDataLogger.html">Code/Data Logger</a></p>
<p><br></p>
<p><br/></p>
<p><span class="rvts10">ROM Editing / Game Genie Codes</span></p>
<p><a class="rvts18" href="HexEditor.html">Hex Editor</a>, <a class="rvts18" href="CheatSearch.html">Cheat Search</a>, <a class="rvts18" href="GameGenieEncoderDecoder.html">Game Genie Decoder/Encoder</a></p>
<p><br></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com">Free CHM Help documentation generator</a></p>
<p><br/></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/create-epub-ebooks">Generate EPub eBooks with ease</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>Sound</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -53,14 +53,14 @@
<div id="topic_content">
<p><span class="rvts17">Sound</span></p>
<p><br></p>
<p><br/></p>
<p>Includes specifications for the NSF Format &amp; NES Sound core </p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><a class="rvts18" href="NSFFormat.html">NSF Format</a></p>
<p><br></p>
<p><br/></p>
<p><a class="rvts18" href="NESSound.html">NES Sound</a></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour">Easily create Web Help sites</a></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour/iphone-website-generation">Create iPhone web-based documentation</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>Sound</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -53,48 +53,48 @@
<div id="topic_content">
<p><span class="rvts17">Sound Configuration</span></p>
<p><br></p>
<p><br/></p>
<p>where you can configure sound</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts16">Input/Output format</span></p>
<p><br></p>
<p>The sound enabled/disabled checkbox will turn on/off FCEUX's sound.<br><br></p>
<p><br/></p>
<p>The sound enabled/disabled checkbox will turn on/off FCEUX's sound.<br/><br/></p>
<p>The force 8-bit sound checkbox will override the current sound configuration and use 8-bit sound instead.</p>
<p><br></p>
<p><br/></p>
<p>You can select the sound quality in the sound quality pull down menu.</p>
<p><br></p>
<p><br/></p>
<p>Rate sets the audio sample rate.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts16">Mute frame advance</span></p>
<p><br></p>
<p><br/></p>
<p>If checked, no sound will be produce when frame advance is pressed.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts16">Mute Turbo</span></p>
<p><br></p>
<p><br/></p>
<p>If checked, the sound processing will be bypassed when emulation is in turbo mode</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts16">Buffering</span></p>
<p><br></p>
<p><br/></p>
<p>On older machines, increased buffering may be necessary. &nbsp;If the sound is glitchy or crackling, increasing the buffing time may resolve the issue. &nbsp;Lower buffering settings can reduce sound latency.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts16">Volume Control</span></p>
<p><br></p>
<p><br/></p>
<p>Sets the sound volume of the master sound or individual sound channels.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts10">Master</span></p>
<p><br></p>
<p><br/></p>
<p>Sets the Master volume level. &nbsp;You can also set volume levels using the sound volume up, volume down, mute, and volume normal hotkeys under map <a class="rvts18" href="MapHotkeys.html">hotkeys menu</a>.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts10">Triangle/Square 1/Square 2/Noise/PCM</span></p>
<p><br></p>
<p><br/></p>
<p>Sets the volume to each individual sound channel.</p>
<p><br></p>
<p><br/></p>
<p>Note: When using low quality sound, the amount of channel control is greatly limited. &nbsp;Some sound channels are disabled.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts10">Restore Defaults</span></p>
<p><br></p>
<p><br/></p>
<p>Restores the master and individual sound channel volumes to their default location.</p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour">Easily create Web Help sites</a></p>
</div>

View File

@ -3,7 +3,7 @@
<head>
<title>TAS Editor</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -53,18 +53,18 @@
<div id="topic_content">
<p><span class="rvts17">TAS Editor</span></p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p>TAS Editor is an overhaul in the logic of creating TAS movies (see <a class="rvts18" href="ToolAssistedSpeedruns.html">Tool Assisted Speedruns</a>). &nbsp;It is a powerful new design that takes movie making from a "recording" concept to a "creating an input file" way of thinking.</p>
<p><br></p>
<p><br/></p>
<p>In 2.1.6 release TAS Editor was completely redesigned and rewritten, incorporating new experimental ideas.</p>
<p>Now it also has its own Manual.</p>
<p><br></p>
<p><br/></p>
<p>The tool is only available in Windows version of FCEUX.</p>
<p><br></p>
<p><br></p>
<p><br></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com">Free PDF documentation generator</a></p>
<p><br/></p>
<p><br/></p>
<p><br/></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour/create-ebooks-for-amazon-kindle">Write eBooks for the Kindle</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>Technical Information</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -49,13 +49,13 @@
<div id="topic_content">
<p><span class="rvts17">Technical Information</span></p>
<p><span class="rvts17"><br></span></p>
<p><span class="rvts17"><br/></span></p>
<p>These chapters deal with documentation of specific hardware configurations of the NES and/or how the FCEU core emulates these aspects.</p>
<p><br></p>
<p><br/></p>
<p>More documentation about NES and Famicom hardware specifications can be found at: <a class="rvts18" href="http://nesdev.parodius.com/">http://nesdev.parodius.com/</a></p>
<p><br></p>
<p><br></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com">Free HTML Help documentation generator</a></p>
<p><br/></p>
<p><br/></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour/create-ebooks-for-amazon-kindle">Produce Kindle eBooks easily</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>Text Hooker</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -53,102 +53,102 @@
<div id="topic_content">
<p><span class="rvts17">Text Hooker</span></p>
<p><span class="rvts10"><br></span></p>
<p><span class="rvts10"><br/></span></p>
<p><span class="rvts10">(written by Ugly Joe, author of the Text Hooker tool)</span></p>
<p><span class="rvts10"><br></span></p>
<p><span class="rvts10"><br></span></p>
<p><span class="rvts10"><br/></span></p>
<p><span class="rvts10"><br/></span></p>
<p><span class="rvts28">What is Text Hooker? </span></p>
<p><span class="rvts10"><br></span></p>
<p><span class="rvts10"><br/></span></p>
<p><span class="rvts10">Here's a premise for you. Suppose you've pirated a bunch of Japanese NES roms and you load one of them up at random. Cool music. Cool title screen. You go to start a game, put in ???? at the name entry screen, and get to the actual game. Well, big surprise here, it's an RPG. You soon realize that you have no idea what people are saying, what shops are selling, or what your battle options are. It can be fun to trial-and-error for a while, but you're ultimately stuck in the first town. Time to load up a new ROM.</span></p>
<p><span class="rvts10"><br></span></p>
<p><span class="rvts10"><br/></span></p>
<p><span class="rvts10">Well, being the aspiring Japanophile that I am, I have all kinds of translation tools and websites at my disposal. It's not impossible for me to figure out the kana for an item name, put it into a website somewhere, and figure out what it is. It's a slow process, but I can figure out short, simple strings of Japanese text. Sometimes, this is all I need to know to get by.</span></p>
<p><span class="rvts10"><br></span></p>
<p><span class="rvts10"><br/></span></p>
<p><span class="rvts10">This is why I made the Text Hooker. What it allows you to do is highlight text boxes in the game and copy the kana right to the clipboard. I no longer have to look up stuff, I can just copy from the emulator, paste into the website, and go from there. While developing it, I took it a bit further by adding a (shoddy) translator right into the app, and added features such as word substitutions (so you only have to look up the word once and then the app will know what it is as soon as you copy it). What you end up with is kind of like a translator's notebook. It keeps commonly used words in a dictionary and helps you get through a Japanese game without having too much knowledge of the Japanese language.</span></p>
<p><span class="rvts10"><br></span></p>
<p><span class="rvts10"><br></span></p>
<p><span class="rvts10"><br/></span></p>
<p><span class="rvts10"><br/></span></p>
<p><span class="rvts28">What do I need to use to use it?</span></p>
<p><span class="rvts10"><br></span></p>
<p><span class="rvts10"><br/></span></p>
<p><span class="rvts16">Some knowledge of the Japanese language</span></p>
<p><span class="rvts10">I really can't say how much you need to know, but I suppose the more you know the better. I could be wrong, but I think you need to know at least something about the language before you can start copy/pasting translations.</span></p>
<p><span class="rvts10"><br></span></p>
<p><span class="rvts10"><br/></span></p>
<p><span class="rvts16">Know how to make a Japanese table file</span></p>
<p><span class="rvts10">I'm not going to explain how to do this since there are adequate tutorials already out there. You'll need to be able to do this per game in order for the Text Hooker to work.</span></p>
<p><span class="rvts10"><br></span></p>
<p><span class="rvts10"><br/></span></p>
<p><span class="rvts10">Japanese font support</span></p>
<p><span class="rvts10">Okay, I have tested this thing on a Win98 installation with no Japanese font. It still works. However, I didn't test it for very long and I'm not sure how well translation websites are going to work without it. So, it might work without Japanese font support, but I'm not officially saying it does.</span></p>
<p><span class="rvts10"><br></span></p>
<p><span class="rvts10"><br/></span></p>
<p><span class="rvts10">A Japanese ROM</span></p>
<p><span class="rvts10">Duh, you'll need a game to play. Find it yourself.</span></p>
<p><span class="rvts10"><br></span></p>
<p><span class="rvts10"><br></span></p>
<p><span class="rvts10"><br/></span></p>
<p><span class="rvts10"><br/></span></p>
<p><span class="rvts28">How do I use the Text Hooker?</span></p>
<p><span class="rvts10"><br></span></p>
<p><span class="rvts10"><br/></span></p>
<p><span class="rvts10">First of all, you need to make your table file. The text hooker doesn't use Thingy tables, but uses a modified Thingy table instead. So, make your standard Thingy table file, but save it with a .tht extension (instead of .tbl). What you need to add to the table are the dakuten and handakuten marks (tenten and maru). The byte for the dakuten mark needs to be set to tenten and the byte for the handakuten mark needs to be set to tenten. Like:</span></p>
<p><span class="rvts10"><br></span></p>
<p><span class="rvts10"><br/></span></p>
<p><span class="rvts10">DC=tenten</span></p>
<p><span class="rvts10">DD=maru</span></p>
<p><span class="rvts10"><br></span></p>
<p><span class="rvts10"><br/></span></p>
<p><span class="rvts10">If you don't do this, the Text Hooker will fail miserabley when copying the text over from the game.</span></p>
<p><span class="rvts10"><br></span></p>
<p><span class="rvts10"><br/></span></p>
<p><span class="rvts10">Once you have your table file ready, open up your rom in FCEUXDSP CE and open the text hooker window (Tools -&gt; Text Hooker). Click on the "Load Table" button and open up your .tht file. Now you can really get ready to work.</span></p>
<p><span class="rvts10"><br></span></p>
<p><span class="rvts10"><br/></span></p>
<p><span class="rvts16">Basic Usage</span></p>
<p><span class="rvts10"><br></span></p>
<p><span class="rvts10"><br/></span></p>
<p><span class="rvts10">A warning</span></p>
<p><span class="rvts10">All information is saved in the table file. You have to save your table manually using the Save Table button. If you close the Text Hooker window or load a different table, your changes since the last save will be lost. You will not be prompted to save changes. Please remember to save!</span></p>
<p><span class="rvts10"><br></span></p>
<p><span class="rvts10"><br/></span></p>
<p><span class="rvts10">Making Selections</span></p>
<p><span class="rvts10">The Selection Window is where you select the text in the game. It is basically the same view as the actual emulator window, but it updates less often and does not show sprites (text is not drawn with sprites, so they are not needed). To make a selection, click on a deselected tile and drag your mouse. To remove a selection, click on a selected tile and drag your mouse. It works a lot like a pen tool and an eraser tool in standard paint programs.</span></p>
<p><span class="rvts10"><br></span></p>
<p><span class="rvts10"><br/></span></p>
<p><span class="rvts10">Once you have made a selection, you can save it for later use. This comes in handy since most RPGs will display their text boxes and battle menus in the same place throughout the entire game. To save a selection, type a name for the selection into the New Selection Name field and press the Save Selection button. Note that this selection will not be saved to your table file until you press the Save Table button.</span></p>
<p><span class="rvts10"><br></span></p>
<p><span class="rvts10"><br/></span></p>
<p><span class="rvts10">You can also use the Clear Selection button to deselect all of the tiles in the selection window.</span></p>
<p><span class="rvts10"><br></span></p>
<p><span class="rvts10"><br/></span></p>
<p><span class="rvts10">Please note that when you select text, you should not select the mostly blank rows that contains the dakuten and handakuten marks. You're essentially selecting every other row. Please see the UI image above for an example.</span></p>
<p><span class="rvts10"><br></span></p>
<p><span class="rvts10"><br/></span></p>
<p><span class="rvts10">Translating Text</span></p>
<p><span class="rvts10">Once you've made a selection, press the big Snap button to copy the text into the Hooked Text window. Only the tiles that are defined in your table file will be copied over. All other tiles will be ignored. Once you have some Japanese text in your Hooked Text window, you have a few options. You can press the Excite.co.jp button to receive a really bad translation (better than Babelfish, but still bad) in the Translated Text window, or you can select all or part of the text in the Hooked Text window and copy/paste it into another translation tool or website. If you're translating a block of text (as opposed to item names or menus), you should probably use the Trim button to clean up the excess whitespace.</span></p>
<p><span class="rvts10"><br></span></p>
<p><span class="rvts10"><br/></span></p>
<p><span class="rvts10">Please bear in mind that, due to the limitations of the NES, Japenese games use very little kanji. This means you'll have to look up the kana representation of what would normally be a kanji. Most translation tools will give you a hard time about this.</span></p>
<p><span class="rvts10"><br></span></p>
<p><span class="rvts10"><br/></span></p>
<p><span class="rvts10">The word substitution feature can be used to process the selected text before it is sent to the Hooked Text window. By entering in Japanese-to-English definitions, you build up your word subs dictionary. If word subs are enabled and you press the snap button, the selected text is checked against your dictionary and any words that it finds are replaced by their definition.</span></p>
<p><span class="rvts10"><br></span></p>
<p><span class="rvts10"><br/></span></p>
<p><span class="rvts10">This is useful for a few reason. One, many words written in katakana don't translate too well. You can use this to stop the translators from mangling them. Two, character names are often the same thing as words. For example, if your character's name is ??? (Sakura), the translator will likely translate it to “cherry blossom”. If you define ??? as Sakura, then you won't have to worry about that. Three, you only really need to translate menus and items once. Once you have them figured out, add them to your dictionary. This way, you can just select your menu (perhaps from a saved selection?) and press Snap -- instant menu translation! Four, I'm not positive about this, but if you know that a string of kana is going to always mean a particular kanji, you could put the kana in the Japanese side and the kanji in the English side. This would aid translators since it wouldn't have to try and figure it out itself. Note that I haven't tested that last one since I don't know enough kanji to put it to the test.</span></p>
<p><span class="rvts10"><br></span></p>
<p><span class="rvts10"><br/></span></p>
<p><span class="rvts10">Again, please remember that your dictionary will not be saved unless you use the Save Table button.</span></p>
<p><span class="rvts10"><br></span></p>
<p><span class="rvts10"><br/></span></p>
<p><span class="rvts16">Tweaking</span></p>
<p><span class="rvts10">Here are some other helpful features.</span></p>
<p><span class="rvts10"><br></span></p>
<p><span class="rvts10"><br/></span></p>
<p><span class="rvts10">Pause Button: this is used to pause and unpause the emulator.</span></p>
<p><span class="rvts10"><br></span></p>
<p><span class="rvts10"><br/></span></p>
<p><span class="rvts10">Scanline: this is used to determine on what scanline the Selection Window will be updated. Some games will switch their font tiles in and out of the PPU. If this happens, you may need to change the scanline to a bigger number in order to see the tiles you're looking for. For example, this happens a lot in the game Metal Slader Glory.</span></p>
<p><span class="rvts10"><br></span></p>
<p><span class="rvts10"><br/></span></p>
<p><span class="rvts10">Update every x frames: this is used to determine how often the Selection Window is updated. The smaller the number, the slower the emulator will go.</span></p>
<p><span class="rvts10"><br></span></p>
<p><span class="rvts10"><br/></span></p>
<p><span class="rvts10">Selection Window checkbox: this is used to determine whether or not the selection window should be updated. If you're not going to be needing the Text Hooker for a while, you should probably uncheck this box while you play.</span></p>
<p><span class="rvts10"><br></span></p>
<p><span class="rvts10"><br/></span></p>
<p><span class="rvts10">Word Substitution checkbox: this is used to determine whether or not word substitution will be used.</span></p>
<p><span class="rvts10"><br></span></p>
<p><span class="rvts10"><br/></span></p>
<p><span class="rvts10">(han)dakuten mark position checkbox: this is used to tell the text hooker where the dakuten and handakuten marks are located in relation to the kana. Most games will use Above, but some games that try to squeeze in as much text into a small area as possible will use Right.</span></p>
<p><span class="rvts10">Features &gt; Text Hooker &gt; Reference</span></p>
<p><span class="rvts10">Features &gt; Text Hooker &gt; Reference &gt; Text Hooker Table file reference</span></p>
<p><span class="rvts10">I suppose this is the kind of thing that should be documented, so here it is. When I started to make this thing, I was just using Thingy tables. When I started to add other features, I knew I needed to save them somewhere. It seemed kind of dumb to me to store this information in separate files, so I decided I would append the other sections to the end of the table files. In the far off chance that there becomes some kind of archive for Text Hooker table files, I decided to use a different extension.</span></p>
<p><span class="rvts10"><br></span></p>
<p><span class="rvts10"><br/></span></p>
<p><span class="rvts10">A .tht file is comprised of three parts (and possibly more in the future). The first part resembles a Thingy table, since it's more or less that same thing. You have a hex byte value, and equals sign, and the corresponding character after the equals sign. The biggest difference from Thingy tables is that the tenten and maru marks must be defined using the words tenten and maru.</span></p>
<p><span class="rvts10"><br></span></p>
<p><span class="rvts10"><br/></span></p>
<p><span class="rvts10">The next section is the Selections storage. This section begins with a</span></p>
<p><span class="rvts10"><br></span></p>
<p><span class="rvts10"><br/></span></p>
<p><span class="rvts10">[selections]</span></p>
<p><span class="rvts10"><br></span></p>
<p><span class="rvts10"><br/></span></p>
<p><span class="rvts10">declaration. What follows are hashes for saved selections (name of selection, equals sign, hash). The hashes should be safe for viewing and saving in any text editor that is capable of viewing and saving Japanese text. These hashes are, admittedly, under tested. If anyone can find a situation in which the selection hashes are corrupted but the rest of the table file is not, please let me know.</span></p>
<p><span class="rvts10"><br></span></p>
<p><span class="rvts10"><br/></span></p>
<p><span class="rvts10">Up next is the Word Substitution Dictionary. This section begins with a</span></p>
<p><span class="rvts10"><br></span></p>
<p><span class="rvts10"><br/></span></p>
<p><span class="rvts10">[words]</span></p>
<p><span class="rvts10"><br></span></p>
<p><span class="rvts10"><br/></span></p>
<p><span class="rvts10">declaration. These lines are formatted in a Japanese=English manner. You should be able to have Japanese or English on either or both sides. It's nothing more than a list of values used during a search and replace function. </span></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com">Free PDF documentation generator</a></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com">Easy EPub and documentation editor</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>Timing</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -53,18 +53,18 @@
<div id="topic_content">
<p><span class="rvts17">Timings</span></p>
<p><br></p>
<p><br/></p>
<p>Settings related to emulation timing.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts16">Disable Speed Throttling Used When Sound is Disabled</span></p>
<p><br></p>
<p><br/></p>
<p>If checked, speed throttling will not be used while sound is disabled. &nbsp;(Speed throttling gives a performance boost while sound is off).</p>
<p><span class="rvts16"><br></span></p>
<p><span class="rvts16"><br/></span></p>
<p><span class="rvts16">Set High Priority Thread</span></p>
<p><br></p>
<p><br/></p>
<p>Sets processing priority. &nbsp;Enabling can help slower computers keep a steady 60fps (or 50fps) framerate.</p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour">Easily create Web Help sites</a></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/create-epub-ebooks">Full featured EBook editor</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>Menu Items &amp; Submenus</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -53,122 +53,122 @@
<div id="topic_content">
<p><span class="rvts35">Config Toggle Switches</span></p>
<p><br></p>
<p><br/></p>
<p>Explains the various toggle switch commands in the top two groups of commands under the Config Menu.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts16">Hide Menu</span></p>
<p><br></p>
<p><br/></p>
<p>Hides the Menu commands on the FCEUX main window. &nbsp;Press ESC to unhide the menu.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts16">Game Genie</span></p>
<p><br></p>
<p><br/></p>
<p>Allows the use of the game genie ROM. &nbsp;You must have a game genie ROM named gg.rom (it is save to rename a game genie.nes file to gg.rom) and it must be in the FCEUX base directory (which is the folder fceux.exe is in unless you specified a different folder in the <a class="rvts18" href="Directories.html">Directory Override Menu</a>).</p>
<p><br></p>
<p><br/></p>
<p>If enabled, FCEUX will open gg.rom first when you load a new game. &nbsp;Any codes applied in the game genie screen will be applied to the game just like on a real NES. &nbsp;</p>
<p><br></p>
<p><br/></p>
<p>(Remember that enabling/disabling Game Genie emulation will not take effect until a new game is loaded)</p>
<p><br></p>
<p><br/></p>
<p>Note: &nbsp;Game genie codes can also be added with the <a class="rvts18" href="GameGenieEncoderDecoder.html">Game Genie Encoder/Decoder</a> via the <a class="rvts18" href="CheatSearch.html">Cheat Search Menu</a> (and does not require a game genie ROM).</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts16">PAL Emulation</span></p>
<p><br></p>
<p><br/></p>
<p>Toggles between NTSC (60fps) and PAL (50fps) frame rates. &nbsp;By default, FCEUX will detect the proper choice when loading a ROM and set the flag accordingly. &nbsp;</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts33">PPU </span><span class="rvts36">(Sub-menu)</span></p>
<p><br></p>
<p><br/></p>
<p><span class="rvts38">New PPU / Old PPU</span></p>
<p>As of FCEUX 2.1.2, FCEUX has a new PPU core. &nbsp;The new PPU has improved accuracy and greater game compatibility than the previous PPU. &nbsp;However, some games may not work properly and there will be slight timing differences that would hurt movie compatibility. &nbsp;Therefore, FCEUX will still support the old PPU. &nbsp;Currently, Old PPU is the default setting.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts33">Enable </span><span class="rvts36">(Sub-menu)</span></p>
<p><br></p>
<p><br/></p>
<p><span class="rvts16">Run in Background</span></p>
<p><br></p>
<p><br/></p>
<p>If enabled, FCEUX will continue to emulate when the window is not in focus. &nbsp;If disabled, the emulator will pause when out of focus.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts16">Background Input</span></p>
<p><br></p>
<p><br/></p>
<p>If enabled, FCEUX can continue to receive input while not in focus. &nbsp;(Useful for playing 2 FCEUX's simultaneously)</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts16">Auto-savestates</span></p>
<p><br></p>
<p><br/></p>
<p>Enables the Auto-save feature. &nbsp;If enabled, FCEUX will make periodic savestates (once per every 256 frames) as you play or record a movie. &nbsp;You can right-click and select the "load last auto-save" in the context menu or press "Load Last Auto-save" <a class="rvts18" href="MapHotkeys.html">hotkey</a> to back up to the last auto-save savestate.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts28">Frame Adv. - Skip Lag</span></p>
<p><br></p>
<p><br/></p>
<p>This feature, if enabled, will cause the frame advance key (see <a class="rvts18" href="MovieRecording.html">movie recording</a>) to skip over lag frames. &nbsp;It does this by reading the lag counter (see <span class="rvts18">display</span>) and skipping past any frames where the input is not polled. &nbsp;</p>
<p><br></p>
<p><br/></p>
<p>For instance, in a 30fps game (such as double dragon), frame advance will advance 2 frames instead of 1.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts28">Backup Savestates</span></p>
<p><br></p>
<p><br/></p>
<p>Enabled by default. &nbsp;This option allows for savestate &amp; loadstate Undo (&amp; redo).&nbsp;<span class="rvts39"> (see </span><a class="rvts40" href="ContextMenuItems.html">context menu</a><span class="rvts39">)</span></p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts28">Compress Savestates</span></p>
<p><br></p>
<p><br/></p>
<p>Enabled by default. &nbsp;This option compresses non movie savestates.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts33">Display </span><span class="rvts36">(Sub-Menu)</span></p>
<p><br></p>
<p><br/></p>
<p><span class="rvts16">Input Display</span></p>
<p><br></p>
<p><br/></p>
<p>The input display will display 1-4 pictures of a NES controller at the bottom of the screen. &nbsp;When playing/recording a movie, these controllers will display the input that is captured in the file. &nbsp;</p>
<p><br></p>
<p><br/></p>
<p>When input comes from a movie file rather than then user, it is displayed in a different color (silver)</p>
<p><br></p>
<p><br/></p>
<p>The input display can also be toggled by hotkey. &nbsp;The default key for toggling the Input display is the "," (comma) key. &nbsp;(This can be re-mapped in the <a class="rvts18" href="MapHotkeys.html">Map Hotkeys Menu</a>).</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts16">Lag Counter</span></p>
<p><br></p>
<p><br/></p>
<p>The lag counter will increment every time to the game fails to poll for user input. &nbsp;It will display in red on any frame that is currently lagging and will increment the lag counter by 1. &nbsp;These situations occur when the game is lagging (too much information to process), or the game is in a screen transition state (so not polling for user input). &nbsp;In &nbsp;a 30fps game (such as Double Dragon 2), it will increment every other frame.</p>
<p><br></p>
<p><br/></p>
<p>The lag counter value is stored in savestates. &nbsp; &nbsp;</p>
<p><br></p>
<p><br/></p>
<p>Displaying the lag counter can also be toggled by hotkey. &nbsp;The default key is the "/" (slash) key. &nbsp;(This can be re-mapped in the <a class="rvts18" href="MapHotkeys.html">Map Hokeys Menu)</a>.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts16">Frame Counter</span></p>
<p><br></p>
<p><br/></p>
<p>Toggles the display of the frame counter. &nbsp;The frame counter will increment once per frame.</p>
<p><br></p>
<p><br/></p>
<p>The frame counter display can also be toggled by hotkey. &nbsp;The default key is the "." (period) key. &nbsp;(This can be re-mapped in the <a class="rvts18" href="MapHotkeys.html">Map Hotkeys Menu</a>).</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts16">Rerecord Counter</span></p>
<p><br></p>
<p><br/></p>
<p>Toggles the display of the number of Rerecords done when making a movie. &nbsp;The Rerecord counter will increment every time you load a savestate in Recording mode.</p>
<p><br></p>
<p><br/></p>
<p>The rerecord counter display can also be toggled by hotkey. &nbsp;The default key is the "M" key. &nbsp;(This can be re-mapped in the <a class="rvts18" href="MapHotkeys.html">Map Hotkeys Menu</a>).</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts16">Movie status icon</span></p>
<p><br></p>
<p><br/></p>
<p>Toggles the display of "pause", "play" or "record" icons in the lower right corner.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts16">Graphics: BG</span></p>
<p>Turning this off will turn off the backgrounds in the game.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts16">Graphics: OBJ</span></p>
<p>Turning this off will turn off the objects (sprites) in the game.</p>
<p><br></p>
<p><br/></p>
<p>Note: You can set the default color when the Backgrounds are turned off. &nbsp;To do so, open fceux.cfg and change the value of the entry named: <span class="rvts37">gNoBGFillColor </span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts16">Save Config File</span></p>
<p><span class="rvts37"><br></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Saves current settings to fceux.cfg. &nbsp;Normally settings are not saved until FCEUX is closed.</span></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour/iphone-website-generation">Create iPhone web-based documentation</a></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour/iphone-website-generation">Free iPhone documentation generator</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>Tool Assisted Speedruns</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -53,56 +53,56 @@
<div id="topic_content">
<p><span class="rvts17">Tool Assisted Speedruns</span></p>
<p><br></p>
<p><br/></p>
<p><span class="rvts16">What is Tool Assisted Speedrunning?</span></p>
<p><br></p>
<p><br/></p>
<p>A tool-assisted speedrun (commonly abbreviated TAS) is a speedrun movie or performance produced with the use of tools such as slow motion and re-recording. The basic premise of these runs is that a "tool" (such as an emulator that provides the author with features that are unavailable in regular playing) is used in order to overcome human limitations such as skill and reflex.</p>
<p><br></p>
<p><br/></p>
<p>Creating a tool-assisted speed run is the process of finding the ideal set of inputs to complete a given criterion - usually completing a game as fast as possible. No limits are imposed on the tools used for this search, but the result has to be a set of timed key-presses that, when played back on the actual console, achieves the target criterion. Traditionally, the only available tool for this was an emulator with re-recording - the ability to use savestate while recording key-presses. However, due to advances in the field, it is now often expected that frame-advance, stepping through emulation one frame at a time, is used. A tool-assisted speed run done without this technique may be criticised as "sloppy play". Before frame-advance became common, playing in slow motion was a common technique, but frame-advance has displaced this.</p>
<p><br></p>
<p><br/></p>
<p>In essence, Tool Assistance allows one to overcome human limitations of skill and reflex in order push a game to its limits. &nbsp;One important thing to remember is that TAS movies are not competing in terms of playing skill, nor do they claim to. </p>
<p><br></p>
<p><br/></p>
<p>For more info on Tool Assisted Speedruns:</p>
<p><a class="rvts18" href="http://tasvideos.org/">http://tasvideos.org/</a></p>
<p><a class="rvts18" href="http://tasvideos.org/WhyAndHow.html">http://tasvideos.org/WhyAndHow.html</a></p>
<p><a class="rvts18" href="http://en.wikipedia.org/wiki/Tool-assisted_speedrun">http://en.wikipedia.org/wiki/Tool-assisted_speedrun</a></p>
<p><br></p>
<p><br/></p>
<p><span class="rvts16">FCEUX TAS features</span></p>
<p><br></p>
<p><br/></p>
<p>FCEUX provides a wealth of tools and resources for creating TAS Movies for NES &amp; FDS games. &nbsp;It features the most current and cutting edge tools for optimizing movies and making the process of movie making quicker an easier.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts10">Basic Recording features:</span></p>
<p><a class="rvts18" href="MovieRecording.html">Frame advance, Slow-downs, "bullet-proof" rerecording</a>, <a class="rvts18" href="TASEditor.html">TAS Editor</a></p>
<p><br></p>
<p><br/></p>
<p><span class="rvts10">Advanced Recording features </span></p>
<p><a class="rvts18" href="Input.html">Input presets</a>, <a class="rvts18" href="AutoFireConfigurations.html">Auto Hold &amp; Auto-Fire</a></p>
<p><br></p>
<p><br/></p>
<p><span class="rvts10">Automated Movie Making Processes</span></p>
<p><span class="rvts18">Macros &amp; &nbsp;Multi-tracking</span>, <span class="rvts18">Lua scripting</span>, <span class="rvts18">Basic Bot</span>, </p>
<p><br></p>
<p><br/></p>
<p><span class="rvts10">Finding Ram values:</span></p>
<p><a class="rvts18" href="CheatSearch.html">Cheat Search</a>, <span class="rvts18">RAM Filter</span>, <a class="rvts18" href="HexEditor.html">Hex Editor</a>, <a class="rvts18" href="Debugger.html">Debugger</a>, <a class="rvts18" href="NESRAMMappingFindingValues.html">NES RAM Guide</a></p>
<p><br></p>
<p><br/></p>
<p><span class="rvts10">RAM Monitoring:</span></p>
<p><a class="rvts18" href="MemoryWatch.html">Memory Watch</a>, <a class="rvts18" href="HexEditor.html">Hex Editor</a></p>
<p><br></p>
<p><br/></p>
<p><span class="rvts10">Movie Splicing Editing</span></p>
<p><a class="rvts18" href="fm2.html">Text based file format</a></p>
<p><br></p>
<p><br/></p>
<p><span class="rvts16">Movie making</span></p>
<p><span class="rvts16"><br></span></p>
<p><span class="rvts16"><br/></span></p>
<p>To get started making a Tool Assisted Movie, simply begin recording a movie (see <a class="rvts18" href="MovieRecording.html">Movie Recording</a>). &nbsp;The basic premise of TASing, however, is to use re-records to optimize the execution of a decided upon goal (usually to complete the game as fast as possible). &nbsp;Re-recording is the act of replacing an already recorded part (of a movie) with something else; also called undo.</p>
<p><br></p>
<p><br/></p>
<p>In the making of emulator movies, re-recording is done by loading a savestate of earlier event in the movie and continuing playing from that point. &nbsp;The emulator will update the movie file to undo everything that was cancelled by the savestate loading, and continue recording from that point. &nbsp;The makers of tool-assisted speedruns use re-recording very extensively to reach perfection and to avoid mistakes.</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;* In single-segment non-assisted speedruns, re-recording is starting over from beginning. The recording of the failed playing is usually not preserved. &nbsp; &nbsp;</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;* In multi-segment non-assisted speedruns, re-recording is starting over from the beginning of current segment. The recording of the failed segment is not preserved. &nbsp; &nbsp;</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;* In tool-assisted speedruns, re-recording only undoes a small part of playing. The undone part will not be seen in the resulting movie. &nbsp;A tool-assisted movie may have been re-recorded anything between 50 and 200000 times, depending on the precision of the movie and the difficulty of the game. &nbsp;Often, the same small passage of the game (could be as small as fractions of second long) is attempted tens of times before continuing. </p>
<p><br></p>
<p><br/></p>
<p>For more info on making TAS movies:</p>
<p><a class="rvts18" href="http://tasvideos.org/CommonTricks.html">http://tasvideos.org/CommonTricks.html</a></p>
<p><a class="rvts18" href="http://tasvideos.org/GenericTips.html">http://tasvideos.org/GenericTips.html</a></p>
<p><br></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com">Full featured Documentation generator</a></p>
<p><br/></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com">Free HTML Help documentation generator</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>Tools</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -49,48 +49,48 @@
<div id="topic_content">
<p><span class="rvts17">Tools</span></p>
<p><br></p>
<p><br/></p>
<p>Guides for the specific tools and settings under FCEUX's Tools menu.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><a class="rvts41" href="CheatSearch.html">Cheat Search</a></p>
<p><br></p>
<p><br/></p>
<p>A guide to using the cheat search tool.</p>
<p><br></p>
<p><a class="rvts41" href="MemoryWatch.html"><br></a></p>
<p><br/></p>
<p><a class="rvts41" href="MemoryWatch.html"><br/></a></p>
<p><a class="rvts41" href="MemoryWatch.html">Memory Watch</a></p>
<p><br></p>
<p><br/></p>
<p>A guide to using the Memory Watch tool.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts26">RAM Filter</span></p>
<p><br></p>
<p><br/></p>
<p>A guide to using the RAM filter tool.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><a class="rvts41" href="TASEditor.html">TAS Editor</a></p>
<p><br></p>
<p><br/></p>
<p>A new tool designed for making TAS movies.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><a class="rvts41" href="Covertfcm.html">Convert fcm</a></p>
<p><br></p>
<p><br/></p>
<p>A tool that will convert .fcm movie files to the .fm2 file format.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><a class="rvts41" href="AutoFireConfigurations.html">Auto Fire settings</a></p>
<p><br></p>
<p><br/></p>
<p>A guide for setting auto-fire, auto-fire offset, and alternate A and B options.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><a class="rvts41" href="ExternalInput.html">Use External Input</a></p>
<p><br></p>
<p><br/></p>
<p>Explanation of Use External Input</p>
<p><br></p>
<p><br/></p>
<p><a class="rvts41" href="TextHooker.html">Text Hooker</a></p>
<p><br></p>
<p><br/></p>
<p>A guide for using the text hooking tool.</p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com">Free Web Help generator</a></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour/create-ebooks-for-amazon-kindle">Free Kindle producer</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>Trace Logger</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -53,22 +53,30 @@
<div id="topic_content">
<p><span class="rvts45">Trace Logger</span></p>
<p><br></p>
<p><br/></p>
<p><span class="rvts16">Introduction</span></p>
<p><br></p>
<p><br/></p>
<p>The Trace Logger logs every executed instruction and every byte of ROM accessed to the window, or a file if you prefer. &nbsp;Logging to a file is useful if you just want to dump everything that was executed and then search through it later. &nbsp;Logging to the window is useful when you wish to see the instructions that were executed prior to a breakpoint being hit. &nbsp;Both options produce the same data, but the desire to keep that data for a short amount of time or a long amount of time will determine which is best for you.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts16">Using the Trace Logger</span></p>
<p><br></p>
<p>The Trace Logger is a very nice feature which logs each instruction as it is being executed; this log can be output either to a file or the window. &nbsp;If you choose to log to the window, you can set how many lines it will retain before discarding old lines. The higher this setting, the more RAM it will consume, but the more lines you'll have available to work with. &nbsp;Normally, when logging to a window, the only time it shows the log is if you snap the <a class="rvts18" href="Debugger.html">debugger</a> or pause execution. The option to automatically update the log window will keep the window updating while the game runs; this is normally useless unless it is working with the Code/Data Logger to only show newly-executed instructions.</p>
<p><br></p>
<p>The Trace Logger has extra options which work with the Code/Data Logger so that it only shows instructions executed for the first time, or those which access data for the first time. This can be quite useful for finding certain key routines or finding otherwise impossible-to-find data in almost any game. &nbsp;The best way to use this feature is in conjunction with the option to automatically update the window while logging. Then, as you play the game, you can watch new results appear at once. If you're searching for something specific, try to get everything-- EXCEPT what you're looking for-- to execute, then watch closely as what you're looking for executes for the first time.</p>
<p><br></p>
<p><br/></p>
<p>The Trace Logger is a very nice feature which logs each instruction as it is being executed; this log can be output either to a file or the window. &nbsp;If you choose to log to the window, you can set how many lines it will retain before discarding old lines. The higher this setting, the more RAM it will consume, but the more lines you'll have available to work with.</p>
<p><br/></p>
<p>Normally, when logging to a window, the Tracer only shows the log is if you pause emulator by Pause/Frame Advance hotkey or by snapping the Debugger. But there is the option to automatically update the log window will keep the window updating while the game runs; this is normally useless unless it is working with the Code/Data Logger to only show newly-executed instructions.</p>
<p><br/></p>
<p>You can specify the format of output in the log: whether to log registers state for every instruction, and where to put the data in every text line (to the left or to the right from the code disassembly).</p>
<p><br/></p>
<p>For nice visualization of JSRs nesting you can use Stack Pointer for lines tabbing. Since NES games mostly use stack for subroutine calls, this option will produce structurized disassembly that is easier to track back visually. With this option you may also want to put registers text to the left from disassembly text.</p>
<p><br/></p>
<p>The Trace Logger has extra options which work with the Code/Data Logger so that it only shows instructions executed for the first time, or those which access data for the first time. This can be quite useful for finding certain key routines or finding otherwise impossible-to-find data in almost any game. &nbsp;The best way to use this feature is in conjunction with the option to automatically update the window while logging. Then, as you play the game, you can watch new results appear at once. If you're searching for something specific, try to get everything (EXCEPT what you're looking for) to execute, then watch closely as what you're looking for executes for the first time.</p>
<p><br/></p>
<p>There are two ways to filter what the Code/Data Logger shows. The first filter lets you log only newly-executed code (so that an instruction is not logged again if it has already been logged). The second logs only instructions when they access data which hadn't been accessed before. Note that both filters can be used at once (which shows bytes that pass either filter).</p>
<p><br></p>
<p><br></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour">Easily create HTML Help documents</a></p>
<p><br/></p>
<p><br/></p>
<p><br/></p>
<p><br/></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour/create-ebooks-for-amazon-kindle">Write eBooks for the Kindle</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>Troubleshooting</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -53,63 +53,61 @@
<div id="topic_content">
<p><span class="rvts17">Troubleshooting</span></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p>This section describes potential problems/question that could arise when using FCEUX.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts42">Slow emulation / Sound crackle</span></p>
<p><br></p>
<p><br/></p>
<p>FCEUX may not run well on slower CPU's. &nbsp;You can improve performance by setting sound to low quality in the<a class="rvts18" href="SoundOptions.html"> Sound Dialog</a>. &nbsp;In addition, for windowed mode try enabling hardware acceleration in the <a class="rvts18" href="Video.html">Video config</a> dialog may also help.</p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts42">Slow savestates when recording movies</span></p>
<p><br></p>
<p><br/></p>
<p>On slower computers, savestates can be slow with long movies. &nbsp;A small speedup can be done by disabling config &gt; enable &gt; Backup savestates.</p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts42">"The colors in game X do not look right"</span></p>
<p><br></p>
<p><br/></p>
<p>FCEUX uses the color palette of the old FCEU / FCEUXD branches. &nbsp;However, FCEUX comes pre-packaged with several additional color palettes. &nbsp;For more information see <a class="rvts18" href="Palette.html">Palette config</a> and <a class="rvts18" href="PaletteOptions.html">Palette options</a>.</p>
<p><br></p>
<p><br></p>
<p><span class="rvts42">"FCEUX won't open my ROM/File. &nbsp;It let's me select it in the Open File dialog then ignores my selection"</span></p>
<p><br></p>
<p>It maybe be that the filename or pathname includes one or more on ASCII characters. &nbsp;Currently FCEUX does not support Unicode characters.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts42">"I converted a .fcm file to .fm2 but the .fm2 desyncs"</span></p>
<p><br></p>
<p><br/></p>
<p>Depending on what version of FCEU / Game your .fcm was made, there maybe a number of sync issues. &nbsp;These are listed in detail at <a class="rvts18" href="http://tasvideos.org/ConvertFCMtoFM2.html" target="_blank">http://tasvideos.org/ConvertFCMtoFM2.html</a>.</p>
<p><br></p>
<p><br/></p>
<p>In addition, the .fm2 conversion tool has had some issues on certain operating systems including Vista and Mac.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts42">"When I attempt to load a Lua script I get an error / crash"</span></p>
<p><br></p>
<p><br/></p>
<p>Double check you have the Lua .dll files that came packaged with FCEUX 2.1. &nbsp;They must be in the /dll folder from the root directory (where fceux.exe is stored).</p>
<p><br></p>
<p><br/></p>
<p> </p>
<p><span class="rvts42">"Directdraw: Error creating secondary surface"</span></p>
<p><br></p>
<p><br/></p>
<p>Currently this error will happen when attempting to do Full screen mode on Windows Vista. &nbsp;In addition, there has been one reported case of this happening on the 32-bit version of Windows XP. &nbsp;This is a known issue with FCEUX that has not yet been resolved.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts42">"Can't find FDS Bios image when I attempt to load a .fds game!"</span></p>
<p><br></p>
<p><br/></p>
<p>FCEUX requires the FDS Bios to be named disksys.rom. &nbsp;It must be located in the root directory (where fceux.exe is stored) or in the folder of the FDS Directory override (see <a class="rvts18" href="Directories.html">Directory overrides</a>).</p>
<p><br></p>
<p><br/></p>
<p>In addition, there are some bad versions of disksys.rom. &nbsp;The one FDS requires is 8192 bytes.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts42">"How can I use Netplay / Where can I get FCEU Server?"</span></p>
<p><br></p>
<p>Currently FCEUX is not compatible with the FCEU-server code. &nbsp;This is a known issue and will be resolved in a future release.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p>Currently FCEUX is not compatible with the FCEU-server code. &nbsp;This is a known issue and will probably be resolved in a future release.</p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts42">"I have a Game Genie rom, how can I use it with FCEUX?" </span></p>
<p><br></p>
<p><br/></p>
<p>While FCEUX has a <a class="rvts18" href="GameGenieEncoderDecoder.html">Game Genie code converter</a>, you can also use game genie codes with the game genie rom. &nbsp;It must be named gg.rom and be placed in the root directory (where fceux.exe is stored). &nbsp;You must also check NES &gt; Game Genie in the main menu.</p>
<p><br></p>
<p><br></p>
<p><br></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/help-authoring-tool">Free help authoring tool</a></p>
<p><br/></p>
<p><br/></p>
<p><br/></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/create-epub-ebooks">Produce electonic books easily</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>Video</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -53,82 +53,82 @@
<div id="topic_content">
<p><span class="rvts17">Video Configuration</span></p>
<p><br></p>
<p><br/></p>
<p>This window sets various graphics emulation options.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts12">Full Screen Settings</span></p>
<p><br></p>
<p><br/></p>
<p><span class="rvts10">Full Screen</span></p>
<p>If checked, FCEUX will enter full screen mode when it is loaded.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts10">Enter Full Screen Mode after file is loaded</span></p>
<p>If checked, FCEUX will only enter full screen mode when a game is loaded.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts10">Video Mode:</span></p>
<p>Sets the image size while in full mode. &nbsp;If custom is selected, FCEUX will use the settings under "Custom Video Mode".</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts10">Sync Method:</span></p>
<p>If the emulator is running poorly, trying out these sync options can help make it run smoother.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts10">Disable Hardware Acceleration</span></p>
<p>If full screen is causing problems, checking this might fix it.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts28">Custom Video Mode</span></p>
<p><br></p>
<p><br/></p>
<p><span class="rvts10">Mode:</span></p>
<p>Sets the image size during full screen mode, if custom is selected under Full Screen Settings.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts16">Image Size Transform</span></p>
<p><br></p>
<p><br/></p>
<p><span class="rvts10">Special Scaler</span></p>
<p>Within this box is four options: Hq2x, Scale2x, Hq3x, and Scale3x. </p>
<p>- Scale2x/3x just attempts to render out the corners of the pixels to make them look a bit rounder. "2x" means two times bigger than 1x1 and "3x" means three times bigger than 1x1.</p>
<p>- Hq2x/3x does a much better job than scale2x/3x by smearing the pixels together with a slight blur. However, Hq2x/3x requires a faster computer for decent speed (at least 1 GHz and above). "2x" means two times bigger than 1x1 and "3x" means three times bigger than 1x1.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts10">Scale Dimensions by:</span></p>
<p>Takes the image size and multiplies the x and y by a specific amount.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts10">Stretch to Fill Screen</span></p>
<p>Stretches the image to fill the screen during full screen mode. (may not be the best choice depending on your screen size).</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts12">Windowed Settings</span></p>
<p><br></p>
<p><br/></p>
<p><span class="rvts10">Size Multiplier</span></p>
<p>Takes the image size and multiples the x and y by a specific amount. &nbsp;You can also set these by clicking and dragging the FCEUX window.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts10">Force Integral Scaling Factors</span></p>
<p>If checked, &nbsp;FCEUX can only be stretched by even amounts (1x, 2x, 3x, etc.). &nbsp;If unchecked, it can be stretched by any amount.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts10">Force Aspect Ratio Correction</span></p>
<p>If Integral Scaling Factors is unchecked, checking this will only allow the correct aspect ratio while stretching the window.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts10">Current Pixel Aspect Ratio</span></p>
<p>Displays the current Aspect Ratio</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts10">Sync Method</span></p>
<p>If the emulator is running poorly, trying out these sync options can help make it run smoother.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts10">Disable Hardware Acceleration</span></p>
<p>This is checked by default. &nbsp;Slower computers my experience slow emulation and should uncheck this option. &nbsp;The video will be blurred somewhat with this option checked.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts28">Drawing Area</span></p>
<p><br></p>
<p><br/></p>
<p><span class="rvts10">First Line</span></p>
<p>Sets the first scan line for NTSC and PAL Modes. &nbsp;This should be left on the default of 8.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts10">Last Line</span></p>
<p>Sets the last scan line for NTSC and PAL Modes. &nbsp;This should be left on the default of 231.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts10">Clip Left and Right Sides</span> (8 columns each)</p>
<p>If enabled, 8 pixels from each side of the windows will be removed. &nbsp;Who knows why you would want to!</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts28">Emulation</span></p>
<p><br></p>
<p><br/></p>
<p><span class="rvts10">Allow More than 8 sprites per scanline.</span></p>
<p>On real NES hardware, more than 8 sprites on the screen causes flickering. &nbsp;Enabling this can cause less flickering by allowing more sprites to be visible at once. &nbsp;If you prefer to say "true" to NES hardware, this should not be checked.</p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour">Easily create Web Help sites</a></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour/iphone-website-generation">Create iPhone web-based documentation</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>What's New? 2.0.0</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -54,12 +54,12 @@
<p><span class="rvts17">What's New? </span><span class="rvts21">2.0.0</span></p>
<p>Released August 02, 2008</p>
<p><br></p>
<p><br/></p>
<p>FCEUX has all the latest tools, enhancements, and features from FCEU 0.28 rerecording and FCEUXDSP 1.07 &nbsp;In addition, it has many new tools, bug fixes, and enhancements not seen in previous branches.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts21">General</span></p>
<p><br></p>
<p><br/></p>
<p>-A detailed Help Menu! &nbsp;No longer are you aimlessly searching the internet for long lost info on FCEU's options!</p>
<p>-Numerous Dialog box reformats.</p>
<p>-FCEU remembers its last screen (x,y) position.</p>
@ -69,16 +69,16 @@
<p>-More hotkey assignable options in the <a class="rvts18" href="MapHotkeys.html">Map Hotkeys Menu</a>.</p>
<p>-A lag counter</p>
<p>-Autofire uses the lag counter (so it will skip over lag frames)</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts21">Movie support</span></p>
<p><br></p>
<p><br/></p>
<p>Overhauls in both the movie and savestate file formats.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts16">.fm2 File format</span></p>
<p><br></p>
<p><br/></p>
<p>The .fcm file format has been overhauled into a new .fm2 format. &nbsp;Changes include:</p>
<p><br></p>
<p><br/></p>
<p>-Uncompressed and text based format. &nbsp;Movie editing can be done simply in a text editor.</p>
<p>-Recording from soft reset option removed.</p>
<p>-Recording from start (hard reset) no longer has an empty savestate at the beginning.</p>
@ -86,37 +86,37 @@
<p>-Rather than an Author field, it has a full metadata menu where an author can put any info needed.</p>
<p>-A tool to <a class="rvts18" href="Covertfcm.html">convert .fcm</a> files to .fm2 files.</p>
<p>-More specific info on .fm2 files in the <a class="rvts18" href="fm2.html">.fm2 documentation</a>. </p>
<p><br></p>
<p><br/></p>
<p><span class="rvts16">Savestate/Loadstate</span></p>
<p><br></p>
<p><br/></p>
<p>-New savestate file format. &nbsp;NOTE: &nbsp;Savestates from previous FCEU versions CAN NOT be used in FCEUX.</p>
<p>-Fully functional error handling (savestates from other movies cannot be loaded).</p>
<p>-Read-only toggling related bugs fixed.</p>
<p>-Savestate filenames include the name of the movie (if a movie was playing when made). &nbsp;This prevents loading wrong savestates. (This also means that savestate 0 is different when a movie is playing and when it is not).</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts16">7z Archive Support</span></p>
<p><br></p>
<p><br/></p>
<p>-ROMs in any 7z compatible compressed format can be opened directly.</p>
<p>-If more than one valid ROM exists in an archive file, then a dialog box will open with a list of available ROM choices.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts16">TAS Edit</span></p>
<p><br></p>
<p><br/></p>
<p>-A brand new powerful movie making tool that revolutionizes the way TAS movies are made. &nbsp;See <a class="rvts18" href="TASEditor.html">TAS edit</a>.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts21">New Tools</span></p>
<p><br></p>
<p><br/></p>
<p><a class="rvts26" href="TASEditor.html">TAS Edit</a> - a revolutionary new way of making TAS movies.</p>
<p><br></p>
<p><br/></p>
<p><a class="rvts26" href="Input.html">Input Presets</a> - a system for quickly toggling different input configurations.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts21">Tool Upgrades</span></p>
<p><br></p>
<p><br/></p>
<p>Numerous enhancements have been made to various Tools/Options.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts16">Memory Watch</span></p>
<p><br></p>
<p><br/></p>
<p>-Resource management optimized so that memory watch now uses a minimal amount of CPU</p>
<p>-FCEUX remembers memory watch's last screen position (x,y)</p>
<p>-Tab-able Edit boxes</p>
@ -127,38 +127,38 @@
<p>-A recent files Menu</p>
<p>-A "load on startup" option. If checked, memory watch will open automatically when FCEUX is opened</p>
<p>-A "load last file" option. &nbsp;If checked, memory watch will load the last file used</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts16">Cheat Search</span></p>
<p><br></p>
<p><br/></p>
<p>-Now has a minimize button</p>
<p>-Cheat Search Menu from FCEUXDSP (a major overhaul compared to other FCEU branches)</p>
<p>-Possibilities update while playing/frame advancing a game</p>
<p>-Double clicking a value in the possibilities window sends the value directly to Memory Watch</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts16">RAM Filter</span></p>
<p><br></p>
<p><br/></p>
<p>-Double clicking a value in the possibilities window sends the value directly to Memory Watch</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts16">Lua Scripting</span></p>
<p><br></p>
<p><br/></p>
<p>-Uses the latest features of <span class="rvts18">Lua Scripting</span> from FCEU 0.28</p>
<p>-Many enhancements and new commands including dialog creation commands! &nbsp;Now scripts can create their own dialog's and GUI features.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts16">Lua Basic Bot</span></p>
<p><br></p>
<p><br/></p>
<p>-Basicbot removed (from the rerecording version of FCE Ultra). &nbsp;In its place is <a class="rvts18" href="LuaBot.html">lua bot.</a></p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts21">AVI Recording</span></p>
<p><br></p>
<p><br/></p>
<p>-"Movie playback stopped" message recorded in AVI by default</p>
<p>-Turbo Toggle Hotkey. &nbsp;(Allows turbo to be left on for a faster AVI capture).</p>
<p><br></p>
<p><br></p>
<p><br></p>
<p><br></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/help-authoring-tool">Create HTML Help, DOC, PDF and print manuals from 1 single source</a></p>
<p><br/></p>
<p><br/></p>
<p><br/></p>
<p><br/></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour">Full featured Help generator</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>What's New? 2.0.1 (changelog)</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -54,15 +54,15 @@
<p><span class="rvts17">What's New? </span><span class="rvts21">2.0.1</span></p>
<p>Released August 04, 2008</p>
<p><br></p>
<p><br/></p>
<p>This was a maintenance release that fixes a few oversights in the 2.0.0 release.</p>
<p><br></p>
<p><br/></p>
<p>* reorganize display toggle options in the menu</p>
<p>* autofire fix (wasn't initializing to any autofire pattern from a fresh .cfg)</p>
<p>* homebrew mmc5 games now have 64KB of exwram instead of only 8KB</p>
<p>* fix crash related to player2 in lua scripts</p>
<p>* fixed player2 in lua scripts</p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/help-authoring-tool">Single source CHM, PDF, DOC and HTML Help creation</a></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour/create-ebooks-for-amazon-kindle">Full featured Kindle eBooks generator</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>What's New? 2.0.2 (changelog)</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -54,20 +54,20 @@
<p><span class="rvts17">What's New? </span><span class="rvts21">2.0.2</span></p>
<p>Released August 14, 2008</p>
<p><br></p>
<p><br/></p>
<p>This release includes a large number of bug fixes, feature enhancements, and new features.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts16">Fixed Crashing Bugs</span></p>
<p><br></p>
<p><br/></p>
<p>* restore savestate error recovery functionality. &nbsp;Will prevent crashes after savestate error messages</p>
<p>* Fixed - Low speeds (1%) crash FCEUX</p>
<p>* fixes bug where palflag 1 in .fm2 files crashes fceux</p>
<p>* FCEUX no longer crashes when attempting to open a non movie file</p>
<p>* Buffer overflow (change vsprintf to vsnprintf)</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts16">Minor Bug fixes</span></p>
<p><br></p>
<p><br/></p>
<p>* SRAM not wiped on power cycle (during movies)</p>
<p>* Moviefilenames without extension now automatically get fm2</p>
<p>* auto-fill .fcs extension in save state as dialog</p>
@ -81,49 +81,49 @@
<p>* Ctrl+X now works in the memory watch dialog</p>
<p>* Dialog window positions won't "disappear" (-32000 protection on all dialogs that remember x,y)</p>
<p>* fixed View Slots bug - will now always show the used slots</p>
<p><br></p>
<p><br/></p>
<p>* added shift+L as default hotkey for reload lua script</p>
<p>* added input display to the FCEUX main menu</p>
<p>* change config filename from fceu98.cfg to fceux.cfg</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts16">New Features</span></p>
<p><br></p>
<p><br/></p>
<p>* restore IPS patching capability which was lost when archive support was added</p>
<p>* restore ungzipping (and unzipping in sdl) capability which was lost when archive support was added</p>
<p>* re-enable an "author" text field in the record movie dialog</p>
<p>* re-enable support for old-format savestates. (Note: can not be loaded into a movie!)</p>
<p><br></p>
<p><br/></p>
<p>* Added new toggle - frame adv. - lag skip (menu item + hotkey mapping + saved in config), will cause frame adv. to skip frames where input is not read</p>
<p>* Added support for loading movies from archives (just like ROM files). &nbsp;Note: Movies loaded from an archive file will be read-only.</p>
<p>* movie replay dialog displays fractions of a second on movie length</p>
<p><br></p>
<p><br/></p>
<p>* Savestates now save the Lagcounter information.</p>
<p>* added a mute turbo option in sound config</p>
<p><br></p>
<p><br/></p>
<p>* add an option to pick a constant color to draw in place of BG when BG rendering is disabled (look for gNoBGFillColor in config).</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts16">Mappers</span></p>
<p><br></p>
<p><br/></p>
<p>* remove cnrom chr rom size limit for homebrew roms</p>
<p>* mmc5 - 64KB WRAM games now work correctly</p>
<p>* mmc5 - use of chr A regs for BG in sprite 8x8 mode is fixed</p>
<p>* upgrade to cah4e3's latest mapper 163&amp;164 code to fix a crash in a game</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts16">Debugging Tools</span></p>
<p><br></p>
<p><br/></p>
<p>* Debugger - restore snap functionality</p>
<p>* Debugger - add FORBID breakpoints - regions which block breakpoints from happening if they contain the PC</p>
<p>* Debugger - debugger window is now resizeable</p>
<p>* nametable viewer &nbsp;will display correct NT,CHR,ATTR data in more cases (specifically, including some exotic mmc5 cases).</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts16">Lua</span></p>
<p><br></p>
<p><br/></p>
<p>* Savestates remember Lua painting</p>
<p>* add memory.readbyterange to emulua</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts16">SDL only</span></p>
<p><br></p>
<p><br/></p>
<p>* SDL: fixed --input(1-4) options. &nbsp;input1 and 2 are regular inputs, input3 and 4 are famicom expansion inputs</p>
<p>* SDL fix configfile woes. configfile now goes to ~/.fceux/fceux.cfg</p>
<p>* SDL: fixed segfault when opening .fcm files</p>
@ -143,28 +143,28 @@
<p>* SDL: New default hotkeys to more closely match win32 defaults</p>
<p>* SDL: Added lua script loading hotkey (f3). &nbsp;Non win32 SDL requires zenity for this to function.</p>
<p>* SDL: Build script cleanup; also added option for DEBUG builds.</p>
<p><br></p>
<p><br></p>
<p><br></p>
<p><br></p>
<p><br></p>
<p><br></p>
<p><br></p>
<p><br></p>
<p><br></p>
<p><br></p>
<p><br></p>
<p><br></p>
<p><br></p>
<p><br></p>
<p><br></p>
<p><br></p>
<p><br></p>
<p><br></p>
<p><br></p>
<p><br></p>
<p><br></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com">Free HTML Help documentation generator</a></p>
<p><br/></p>
<p><br/></p>
<p><br/></p>
<p><br/></p>
<p><br/></p>
<p><br/></p>
<p><br/></p>
<p><br/></p>
<p><br/></p>
<p><br/></p>
<p><br/></p>
<p><br/></p>
<p><br/></p>
<p><br/></p>
<p><br/></p>
<p><br/></p>
<p><br/></p>
<p><br/></p>
<p><br/></p>
<p><br/></p>
<p><br/></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour/create-ebooks-for-amazon-kindle">Produce Kindle eBooks easily</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>What's New? 2.0.3 (changelog)</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -54,12 +54,12 @@
<p><span class="rvts17">What's New? </span><span class="rvts21">2.0.2</span></p>
<p>Released November 02, 2008</p>
<p><br></p>
<p><br/></p>
<p>This release includes some key bug fixes and feature enhancements.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts16">Major Bug / Crash Bug Fixes</span></p>
<p><br></p>
<p><br/></p>
<p>* Reset/Power-on recording for .fm2 files!</p>
<p>* fix ..fcm conversion, recording, and playback of reset and power commands</p>
<p>* Win32 - auto-load the only useful ROM or movie from an archive, in cases where there is only one</p>
@ -67,14 +67,14 @@
<p>* Win32 - fix a bug in the savestate recovery code which prevent aborted savestate loads from recovering emulator state correctly.</p>
<p>* gracefully handle non-convertible broken UTF-8 text without crashing</p>
<p>* Win32 - don't read every archive file when scanning for replay dialog. scan them, and only look for *.fm2</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts16">New Features Win32</span></p>
<p><br></p>
<p><br/></p>
<p>* Win32 - added a toggle for binding savestates to movies</p>
<p>* Win32 - added -cfg (config file) command line argument</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts16">Minor Bug fixes</span></p>
<p><br></p>
<p><br/></p>
<p>* Win32 - Sound config dialog will now look to see if Mute Turbo should be checked</p>
<p>* Win32 - Debugger - Fix Child windows inside debugging window get invalid sizes</p>
<p>* Win32 - bind a menu option for display frame counter</p>
@ -82,10 +82,10 @@
<p>* Lua ignores second joypad.set()</p>
<p>* Load state as... does not use the savestate override dir (fixed; now, it does)</p>
<p>*Win32 - debugger - fix issue where keyboard keys get stuck when switching between debugger window and main window</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts16">SDL </span></p>
<p><br></p>
<p><br/></p>
<p>* SDL - added support for AVI creation for SDL, see documentation/Videolog.txt for more</p>
<p>* SDL - --inputcfg can now be used without a filename</p>
<p>* SDL - should fix issues with missing author field crashing FCEUX</p>
@ -97,18 +97,18 @@
<p>* SDL - fixed issue where windowed mode would always be set to 32 bpp</p>
<p>* SDL - fixed ppc build errors and added LSB_FIRST option to build scripts</p>
<p>* SDL - --newppu option added to SDL, disabled by default</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts16">GFCEUX (SDL)</span></p>
<p><br></p>
<p><br/></p>
<p>* GFCEUX - made the input config window more usable</p>
<p>* GFCEUX - added uninstall script for GFCEUX</p>
<p><br></p>
<p><br></p>
<p><br></p>
<p><br></p>
<p><br></p>
<p><br></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/help-authoring-tool">Easy to use tool to create HTML Help files and Help web sites</a></p>
<p><br/></p>
<p><br/></p>
<p><br/></p>
<p><br/></p>
<p><br/></p>
<p><br/></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour">Easily create PDF Help documents</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>What's New? 2.1 (changelog)</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -54,12 +54,12 @@
<p><span class="rvts17">What's New? </span><span class="rvts21">2.1</span></p>
<p>Released March 29, 2009</p>
<p><br></p>
<p><br/></p>
<p>This release includes a multitude of new features, major fixes, and enhancements.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts16">New Features Win32</span></p>
<p><br></p>
<p><br/></p>
<p>*The latest mappers and mapper fixes from FCEU-mm. &nbsp;Adds support for many new games such as Warioland II (Unl), Shu Qi Yu, &nbsp;and Street Dance</p>
<p>*Full screen mode fixed! &nbsp;Also, Alt+Enter properly toggles full screen.</p>
<p>*Individual control for sound channels! (See <a class="rvts18" href="SoundOptions.html">sound config</a> for details).</p>
@ -69,16 +69,16 @@
<p>*A Ram change monitor for the Memory watch dialog. (see <a class="rvts18" href="MemoryWatch.html">memwatch</a> for details).</p>
<p>*Frame counter works even without a movie loaded.</p>
<p>*AVI Directory Override option.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts16">Major Bug / Crash Bug Fixes</span></p>
<p><br></p>
<p><br/></p>
<p>*Fixed throttling problems that resulted on AMD Dualcore processors. (Caused FCEUX to appear to be in turbo mode).</p>
<p>*Fix major crash issue where NROM game (such as SMB) savestates were writing erroneous information if a non NROM game was loaded prior.</p>
<p>*Fixed a bug that caused a new sav file to not get created when loading a 2nd battery backed game.</p>
<p>*Fix Directory Overrides so to allow users to have no override. &nbsp;Also fixes directory override reset bug.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts16">Minor Bug fixes</span></p>
<p><br></p>
<p><br/></p>
<p>*Hotkeys - prevent "Hotkey explosion" where some laptop keys set off all unassigned hotkeys</p>
<p>*Timing - "disable throttling when sound is off" now only affects FCEUX when sound is off</p>
<p>*Clip Left and Right sides taken into account when drawing on screen (record/play/pause, lag &amp; frame counters, messages, etc)</p>
@ -88,9 +88,9 @@
<p>*Fixed issues related to big endian compiling. </p>
<p>*Fix bug so that Escape can now be assigned as a hotkey</p>
<p>*Fixed bug in screenshot numbering that caused numbering to not reset when changing games.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts16">GUI / Menu Enhancements</span></p>
<p><br></p>
<p><br/></p>
<p>*A right-click context menu added! &nbsp;Includes many commonly used items for a variety of situations.</p>
<p>*Menu items that are hotkey mappable now show their current hotkey mapping</p>
<p>*Major overhaul to the Menu organization. &nbsp;</p>
@ -102,9 +102,9 @@
<p>*Drag &amp; Drop for .fm2 and .lua files</p>
<p>*Many new functions added to the context menu (See <a class="rvts18" href="ContextMenuItems.html">context menu</a> for details)</p>
<p>*New Mappable Hotkeys: Open Cheats, Open ROM, Close ROM, Undo/Redo savestate, Toggle Movie Subtitles</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts16">Lua</span></p>
<p><br></p>
<p><br/></p>
<p>*Added input.get() ! &nbsp;Returns the mouse info and all keyboard buttons pressed by the user.</p>
<p>*Fixed joypad.set(). &nbsp;False now sets a button to off. &nbsp;Nil does not affect the button at all (allowing the user to still control it).</p>
<p>*gui.text() Increased height (to approx. 7 lines).</p>
@ -128,23 +128,23 @@
<p>*Added joypad.write and joypad.get for naming consistency. </p>
<p>*Added rom.readbyte()</p>
<p>*Added rom.readbytesigned()</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts16">Sound Config</span></p>
<p><br></p>
<p><br/></p>
<p>*Turning sound off disabled sound config controls</p>
<p>*Re-enabled sound buffer time slider control</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts16">Hex Editor</span></p>
<p><br></p>
<p><br/></p>
<p>*Freezing ram addresses automatically updates the Cheats dialog if it is open.</p>
<p>* Added prevention from freezing more than 256 addresses at once (doing so caused crash bugs).</p>
<p>*Dialog remembers window size.</p>
<p>*Dump Rom &amp; Dump PPU to file Dialogs use ROM to build default filename</p>
<p>*Maximize and minimize buttons added.</p>
<p>*Help menu item added</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts16">Memory Watch</span></p>
<p><br></p>
<p><br/></p>
<p>*Dialog now includes Ram change monitoring. (see <a class="rvts18" href="MemoryWatch.html">memwatch</a> for details).</p>
<p>*Dialog is now collapsible to 1 column.</p>
<p>*No longer crashes when attempting to load an invalid file from the recent file menu.</p>
@ -155,9 +155,9 @@
<p>*Drag and drop for .txt (memory watch) files.</p>
<p>*Minor menu and hotkey fixes.</p>
<p>*Watch values now compatible with custom windows dialog colors.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts16">Debugger</span></p>
<p><br></p>
<p><br/></p>
<p>*Shows scanlines and PPU pixel values</p>
<p>*Shows scanlines even while in VBlank</p>
<p>*Added a Run Line button (runs 1 scanline per click)</p>
@ -167,52 +167,52 @@
<p>*Fixed bug that caused dialog to "disappear" due to saving -32000 as its window position.</p>
<p>*Debugger now has a minimum valid size</p>
<p>*Added "Restore original window size" button</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts16">PPU Viewer </span></p>
<p><br></p>
<p><br/></p>
<p>*Default refresh value set to 15</p>
<p>*Refresh value stored in the .cfg file</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts16">Nametable Viewer</span></p>
<p><br></p>
<p><br/></p>
<p>*Default refresh value set to 15</p>
<p>*Refresh value stored in the .cfg file</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts16">Trace Logger</span></p>
<p><br></p>
<p><br/></p>
<p>*Fixed bug where user can't scroll the log window while it is auto-updating.</p>
<p>*Changed message about F2 pause (left over from FCEUXDSP) to display the current hotkey mapping.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts16">Text Hooker</span></p>
<p><br></p>
<p><br/></p>
<p>*Saving a .tht file no longer crashes</p>
<p>*Dialog updates every frame</p>
<p>*Initialization error checking reinstalled,</p>
<p>*Dialog remembers window position</p>
<p>*Fixed bug where canceling save as produces an error message.</p>
<p>*Save As produces default filename based on the current ROM</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts16">Message Log</span></p>
<p><br></p>
<p><br/></p>
<p>*Remembers X,Y position</p>
<p>*Resized width and height</p>
<p>*Allowed more lines of text to appear on the screen at once.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts16">Metadata</span></p>
<p><br></p>
<p><br/></p>
<p>*Remembers window position</p>
<p>*Can be called from the context menu if a movie is loaded (see <a class="rvts18" href="ContextMenuItems.html">context menu</a> for details).</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts16">TASEdit</span></p>
<p><br></p>
<p><br/></p>
<p>*added help menu item</p>
<p>*disabled menu items that are not currently implemented.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts16">Turbo</span></p>
<p>*Turbo now employs frame skip, greatly increasing its speed</p>
<p>*The mute turbo option completely bypasses sound processing (another big speed boost)</p>
<p>*Turbo now works with the Lazy wait for VBlank sync setting</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts16">SDL </span></p>
<p>*SDL Movie subtitle support and subtitle toggle hotkey added.</p>
<p>*SDL Added fcm to fm2 converter tool to SDL version.</p>
@ -223,7 +223,7 @@
<p>*SDL Added option to mute FCEUX for avi capturing, check the documentation for more details.</p>
<p>*SDL Added --noconfig command line option</p>
<p>*SDL Frame Advance Skip Lag frames toggle implemented</p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour">Easily create HTML Help documents</a></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour/create-ebooks-for-amazon-kindle">Write eBooks for the Kindle</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>What's New? 2.1.1 (changelog)</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -54,113 +54,86 @@
<p><span class="rvts17">What's New? </span><span class="rvts21">2.1.1</span></p>
<p>Released July 29, 2009</p>
<p><br></p>
<p><br/></p>
<p>This release includes a multitude of new features, major fixes, and enhancements.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts22">The 2.1 new release fixes some bugs of 2.1.0a, improves the accuracy of the sound core, and adds useability enhancements to the windows port.</span></p>
<p><span class="rvts22"><br></span></p>
<p><span class="rvts22"><br/></span></p>
<p><span class="rvts23">Common - Bug fixes</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Fixed reported issue 2746924 (md5_asciistr() doesn't produce correct string)</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Made default save slot 0 instead of 1</span></p>
<p><span class="rvts22"><br></span></p>
<ul style="text-indent: 0px; margin-left: 24px; list-style-position: outside;">
<li><span class="rvts22">Fixed reported issue 2746924 (md5_asciistr() doesn't produce correct string)</span></li>
<li><span class="rvts22">Made default save slot 0 instead of 1</span></li>
</ul>
<p><span class="rvts22"><br/></span></p>
<p><span class="rvts23">Improved Sound core/PPU</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Fixed the noise value, it seems that the noise logic was shifting the values to the left by 1 when reloading, but this doesn't work for PAL since one of the PAL reload value is odd, so fix the logic and used the old tables. Revert a stupid CPU ignore logic in PPU. Sorry about that. </span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Updated with the correct values for the noise and DMC table, </span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Fixed the CPU unofficial opcode ATX, ORing with correct constant $FF instead of $EE, as tested by blargg's. These fixes passes the IRQ flags test from blargg, and also one more &nbsp;opcode test from blargg's cpu.nes test.</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Square 1 &amp; square 2 volume controls no longer backwards</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Length counters for APU now correct variables</span></p>
<p><span class="rvts22"><br></span></p>
<ul style="text-indent: 0px; margin-left: 24px; list-style-position: outside;">
<li><span class="rvts22">Fixed the noise value, it seems that the noise logic was shifting the values to the left by 1 when reloading, but this doesn't work for PAL since one of the PAL reload value is odd, so fix the logic and used the old tables. Revert a stupid CPU ignore logic in PPU. Sorry about that. </span></li>
<li><span class="rvts22">Updated with the correct values for the noise and DMC table, </span></li>
<li><span class="rvts22">Fixed the CPU unofficial opcode ATX, ORing with correct constant $FF instead of $EE, as tested by blargg's. These fixes passes the IRQ flags test from blargg, and also one more &nbsp;opcode test from blargg's cpu.nes test.</span></li>
<li><span class="rvts22">Square 1 &amp; square 2 volume controls no longer backwards</span></li>
<li><span class="rvts22">Length counters for APU now correct variables</span></li>
</ul>
<p><span class="rvts22"><br/></span></p>
<p><span class="rvts23">NewPPU</span><span class="rvts22"> (still experimental, enabled by setting newppu 1 in the config file)</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Added experimental $2004 reading support to play micro machines with (little) shakes, and fixed some timing in the new PPU.</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Added palette reading cases for the new PPU.</span></p>
<p><span class="rvts24"><br></span></p>
<ul style="text-indent: 0px; margin-left: 24px; list-style-position: outside;">
<li><span class="rvts22">Added experimental $2004 reading support to play micro machines with (little) shakes, and fixed some timing in the new PPU.</span></li>
<li><span class="rvts22">Added palette reading cases for the new PPU.</span></li>
</ul>
<p><span class="rvts24"><br/></span></p>
<p><span class="rvts24">Win32</span></p>
<p><span class="rvts24"><br></span></p>
<p><span class="rvts24"><br/></span></p>
<p><span class="rvts23">Minor Bug fixes</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Replay movie dialog - Stop movie at frame x feature - fixed off by 1 error on the stop frame number</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Hex Editor - changed ROM values again dsiplay as red, saved in the config as RomFreezeColor</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Fixed bug in memory watch that would make the first watch value drawn in the wrong place if watch file was full</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Debugger - Step type functions now update other dialogs such as ppu, nametable, code/data, trace logger, etc.</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">"Disable screen saver" gui option now also diables the monitor powersave</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Recent menus - no longer crash if item no longer exists, instead it ask the user if they want to remove the item from the list</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Sound Config Dialog - When sound is off, all controls are grayed out</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Memory Watch - fixed a regression made in 2.0.1 that broke the Save As menu item</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Memory Watch - save menu item is grayed if file hasn't changed</span></p>
<p><span class="rvts22"><br></span></p>
<p><span class="rvts22"><br></span></p>
<ul style="text-indent: 0px; margin-left: 24px; list-style-position: outside;">
<li><span class="rvts22">Replay movie dialog - Stop movie at frame x feature - fixed off by 1 error on the stop frame number</span></li>
<li><span class="rvts22">Hex Editor - changed ROM values again dsiplay as red, saved in the config as RomFreezeColor</span></li>
<li><span class="rvts22">Fixed bug in memory watch that would make the first watch value drawn in the wrong place if watch file was full</span></li>
<li><span class="rvts22">Debugger - Step type functions now update other dialogs such as ppu, nametable, code/data, trace logger, etc.</span></li>
<li><span class="rvts22">"Disable screen saver" gui option now also diables the monitor powersave</span></li>
<li><span class="rvts22">Recent menus - no longer crash if item no longer exists, instead it ask the user if they want to remove the item from the list</span></li>
<li><span class="rvts22">Sound Config Dialog - When sound is off, all controls are grayed out</span></li>
<li><span class="rvts22">Memory Watch - fixed a regression made in 2.0.1 that broke the Save As menu item</span></li>
<li><span class="rvts22">Memory Watch - save menu item is grayed if file hasn't changed</span></li>
</ul>
<p><span class="rvts22"><br/></span></p>
<p><span class="rvts22"><br/></span></p>
<p><span class="rvts23">GUI/Enhancements</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Last save slot used is stored in the config file</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Made fullscreen toggle (Alt+Enter) remappable</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Hex editor - Reverted fixedFontHeight to 13 instead of 14. &nbsp;Gave the option of adjusting the height by modifying RowHeightBorder in the .cfg file</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Hex Editor - allowed the user to customize the color scheme by use of RGB values stored in the .cfg file</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Hex editor - freeze/unfreeze ram addresses now causes the colors to update immediately, but only with groups of addresses highlighted at once (single ones still don't yet update)</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Hex Editor - Save Rom As... menu option enabled and implemented</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Window caption shows the name of the ROM loaded</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Recent Movie Menu added</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Load Last Movie context menu item added</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Save Movie As... context menu item (for when a movie is loaded in read+write mode)</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Drag &amp; Drop support for all files related to FCEUX including:</span></p>
<ul style="text-indent: 0px; margin-left: 24px; list-style-position: outside;">
<li><span class="rvts22">Last save slot used is stored in the config file</span></li>
<li><span class="rvts22">Made fullscreen toggle (Alt+Enter) remappable</span></li>
<li><span class="rvts22">Hex editor - Reverted fixedFontHeight to 13 instead of 14. &nbsp;Gave the option of adjusting the height by modifying RowHeightBorder in the .cfg file</span></li>
<li><span class="rvts22">Hex Editor - allowed the user to customize the color scheme by use of RGB values stored in the .cfg file</span></li>
<li><span class="rvts22">Hex editor - freeze/unfreeze ram addresses now causes the colors to update immediately, but only with groups of addresses highlighted at once (single ones still don't yet update)</span></li>
<li><span class="rvts22">Hex Editor - Save Rom As... menu option enabled and implemented</span></li>
<li><span class="rvts22">Window caption shows the name of the ROM loaded</span></li>
<li><span class="rvts22">Recent Movie Menu added</span></li>
<li><span class="rvts22">Load Last Movie context menu item added</span></li>
<li><span class="rvts22">Save Movie As... context menu item (for when a movie is loaded in read+write mode)</span></li>
<li><span class="rvts22">Drag &amp; Drop support for all files related to FCEUX including:</span></li>
</ul>
<p><span class="rvts22"> &nbsp; &nbsp;.fcm (autoconverts to .fm2 and begins movie playback)</span></p>
<p><span class="rvts22"> &nbsp; &nbsp;Savestates</span></p>
<p><span class="rvts22"> &nbsp; &nbsp;Palette files (.pal)</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Commandline - -palette commandline option</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Memory Watch - option to bind to main window, if checked it gives GENS dialog style control, where there is no extra task bar item, and it minimizes when FCEUX is minimized</span></p>
<p><span class="rvts22"><br></span></p>
<ul style="text-indent: 0px; margin-left: 24px; list-style-position: outside;">
<li><span class="rvts22">Commandline - -palette commandline option</span></li>
<li><span class="rvts22">Memory Watch - option to bind to main window, if checked it gives GENS dialog style control, where there is no extra task bar item, and it minimizes when FCEUX is minimized</span></li>
</ul>
<p><span class="rvts22"><br/></span></p>
<p><span class="rvts24">SDL</span></p>
<p><span class="rvts22"><br></span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">added --subtitles</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">fixed Four Score movie playback</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">added --ripsubs for converting fm2 movie subtitles to an srt file</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Lua is optional again, fixed the real issue</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Lua is NO longer optional, so the SConscripts have been updated to reflect that change. &nbsp;This fixes the mysterious non-working input issue.</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">implemented saving/loading a savestate from a specific file on Alt+S/L</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">implemented starting an FM2 movie on Alt+R</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">added --pauseframe to pause movie playback on frame x</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">dropped UTFConverter.c from SDL build</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">added hotkey Q for toggling read-only/read+write movie playback</span></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com">Free HTML Help documentation generator</a></p>
<p><span class="rvts22"><br/></span></p>
<ul style="text-indent: 0px; margin-left: 24px; list-style-position: outside;">
<li><span class="rvts22">added --subtitles</span></li>
<li><span class="rvts22">fixed Four Score movie playback</span></li>
<li><span class="rvts22">added --ripsubs for converting fm2 movie subtitles to an srt file</span></li>
<li><span class="rvts22">Lua is optional again, fixed the real issue</span></li>
<li><span class="rvts22">Lua is NO longer optional, so the SConscripts have been updated to reflect that change. &nbsp;This fixes the mysterious non-working input issue.</span></li>
<li><span class="rvts22">implemented saving/loading a savestate from a specific file on Alt+S/L</span></li>
<li><span class="rvts22">implemented starting an FM2 movie on Alt+R</span></li>
<li><span class="rvts22">added --pauseframe to pause movie playback on frame x</span></li>
<li><span class="rvts22">dropped UTFConverter.c from SDL build</span></li>
<li><span class="rvts22">added hotkey Q for toggling read-only/read+write movie playback</span></li>
</ul>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com">Free PDF documentation generator</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>What's New? 2.1.2 (changelog)</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -54,87 +54,65 @@
<p><span class="rvts17">What's New? </span><span class="rvts21">2.1.2</span></p>
<p>Released November 3, 2009</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts22">The 2.1.2 release fixes some bugs of 2.1.0a, increases game compatibility, launches a new PPU core, and adds usability enhancements to the windows port.</span></p>
<p><span class="rvts22"><br></span></p>
<p><span class="rvts22"><br/></span></p>
<p><span class="rvts23">Common </span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">New PPU is now functional! &nbsp;You can access it by changing the newPPU flag in the config file. &nbsp;Windows users can access it from Config &gt; PPU &gt; New PPU</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Dragon Ball Z 3 now playable again</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Fixed action 52 game that was broken in post-FCEUX 2.0.3 versions</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Mapper 253 mostly implemented</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Mapper 43 fixed bug</span></p>
<p><span class="rvts24"><br></span></p>
<ul style="text-indent: 0px; margin-left: 24px; list-style-position: outside;">
<li><span class="rvts22">New PPU is now functional! &nbsp;You can access it by changing the newPPU flag in the config file. &nbsp;Windows users can access it from Config &gt; PPU &gt; New PPU</span></li>
<li><span class="rvts22">Dragon Ball Z 3 now playable again</span></li>
<li><span class="rvts22">Fixed action 52 game that was broken in post-FCEUX 2.0.3 versions</span></li>
<li><span class="rvts22">Mapper 253 mostly implemented</span></li>
<li><span class="rvts22">Mapper 43 fixed bug</span></li>
</ul>
<p><span class="rvts24"><br/></span></p>
<p><span class="rvts24">Win32</span></p>
<p><span class="rvts22"><br></span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Imported NSF features from FCEUXDSP-NSF. &nbsp;Debugging tools are now compatible with NSF files.</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Movies now record FDS disk swapping commands</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Movie play dialog displays movie time based on ~60.1 (~50.1 PAL) instead of 60 &amp; 50</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Ram Watch and Ram Search dialogs imported from GENS rerecording</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Ram Filter dialog removed (now redundant compared to both cheat search and ram search)</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Lua script window ported from GENS</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Fix for the directory overrides bug that caused overrides to reset</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Debugger: &nbsp;.deb file saving/loading restored</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">"Save config file" menu item</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">"New PPU" menu item</span></p>
<p><span class="rvts22"><br></span></p>
<p><span class="rvts22"><br/></span></p>
<ul style="text-indent: 0px; margin-left: 24px; list-style-position: outside;">
<li><span class="rvts22">Imported NSF features from FCEUXDSP-NSF. &nbsp;Debugging tools are now compatible with NSF files.</span></li>
<li><span class="rvts22">Movies now record FDS disk swapping commands</span></li>
<li><span class="rvts22">Movie play dialog displays movie time based on ~60.1 (~50.1 PAL) instead of 60 &amp; 50</span></li>
<li><span class="rvts22">Ram Watch and Ram Search dialogs imported from GENS rerecording</span></li>
<li><span class="rvts22">Ram Filter dialog removed (now redundant compared to both cheat search and ram search)</span></li>
<li><span class="rvts22">Lua script window ported from GENS</span></li>
<li><span class="rvts22">Fix for the directory overrides bug that caused overrides to reset</span></li>
<li><span class="rvts22">Debugger: &nbsp;.deb file saving/loading restored</span></li>
<li><span class="rvts22">"Save config file" menu item</span></li>
<li><span class="rvts22">"New PPU" menu item</span></li>
</ul>
<p><span class="rvts22"><br/></span></p>
<p><span class="rvts23">Minor Bug fixes</span></p>
<p><span class="rvts22"><br></span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Minor fixes to recent menus</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Fixed a bug that prevented the Map Hotkeys dialog's X button from closing the dialog</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Restored DPCM Logging when Code/Data Logger is active</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Memory watch - Save Changes Prompt - clicking save will default to quicksave first and save as 2nd (instead of always defaulting to save as)</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Made Trace Logger refresh adequately when using stepping options in the debugger.</span></p>
<p><span class="rvts22"><br></span></p>
<p><span class="rvts22"><br/></span></p>
<ul style="text-indent: 0px; margin-left: 24px; list-style-position: outside;">
<li><span class="rvts22">Minor fixes to recent menus</span></li>
<li><span class="rvts22">Fixed a bug that prevented the Map Hotkeys dialog's X button from closing the dialog</span></li>
<li><span class="rvts22">Restored DPCM Logging when Code/Data Logger is active</span></li>
<li><span class="rvts22">Memory watch - Save Changes Prompt - clicking save will default to quicksave first and save as 2nd (instead of always defaulting to save as)</span></li>
<li><span class="rvts22">Made Trace Logger refresh adequately when using stepping options in the debugger.</span></li>
</ul>
<p><span class="rvts22"><br/></span></p>
<p><span class="rvts24">Lua</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">joypad.set() fixed. &nbsp;True,False, and Nil now work properly for all buttons. &nbsp;In addition there is a new "invert" option.</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Lua5.1.dll no longer required to use lua.</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">fceu.unpause()</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Added savestate.registerload(), savestate.registersave(), savestate.loadscriptdata()</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">emu. library, has all the same functions as fceu. library for better compatibility between lua emulators</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Many additional function names to increase consistency with other lua emulators</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Added movie.recording() and movie.playing()</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Added memory.getregister() and memory.setregister()</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Added gui.popup and input.popup</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Added savestate.registerload(), savestate.registersave(), and savestate.loadscriptdata()</span></p>
<p><span class="rvts22"><br></span></p>
<p><span class="rvts22"><br></span></p>
<ul style="text-indent: 0px; margin-left: 24px; list-style-position: outside;">
<li><span class="rvts22">joypad.set() fixed. &nbsp;True,False, and Nil now work properly for all buttons. &nbsp;In addition there is a new "invert" option.</span></li>
<li><span class="rvts22">Lua5.1.dll no longer required to use lua.</span></li>
<li><span class="rvts22">fceu.unpause()</span></li>
<li><span class="rvts22">Added savestate.registerload(), savestate.registersave(), savestate.loadscriptdata()</span></li>
<li><span class="rvts22">emu. library, has all the same functions as fceu. library for better compatibility between lua emulators</span></li>
<li><span class="rvts22">Many additional function names to increase consistency with other lua emulators</span></li>
<li><span class="rvts22">Added movie.recording() and movie.playing()</span></li>
<li><span class="rvts22">Added memory.getregister() and memory.setregister()</span></li>
<li><span class="rvts22">Added gui.popup and input.popup</span></li>
<li><span class="rvts22">Added savestate.registerload(), savestate.registersave(), and savestate.loadscriptdata()</span></li>
</ul>
<p><span class="rvts22"><br/></span></p>
<p><span class="rvts22"><br/></span></p>
<p><span class="rvts24">New Lua Scripts</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">A multi-track movie recording tools written by FatRatKnight. &nbsp;Allows input for different players to be recorded separately.</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">A rewinding tool by Antony Lavelle</span></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/help-authoring-tool">Free help authoring environment</a></p>
<ul style="text-indent: 0px; margin-left: 24px; list-style-position: outside;">
<li><span class="rvts22">A multi-track movie recording tools written by FatRatKnight. &nbsp;Allows input for different players to be recorded separately.</span></li>
<li><span class="rvts22">A rewinding tool by Antony Lavelle</span></li>
</ul>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour">Easily create Help documents</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>What's New? 2.1.3 (changelog)</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -54,89 +54,63 @@
<p><span class="rvts17">What's New? </span><span class="rvts21">2.1.3</span></p>
<p>Released April 8, 2010</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts22">The 2.1.3 release fixes some bugs of 2.1.2, increases game compatibility, and adds usability enhancements to the windows port and adds a GUI to the SDL port.</span></p>
<p><span class="rvts22"><br></span></p>
<p><span class="rvts22"><br/></span></p>
<p><span class="rvts23">Common </span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Fixed mappers 82, 25, 21, and 18. &nbsp;Games such as SD Kiji Blader, Ganbare Goemon Gaiden, and Ganbare Goemon Gaiden 2, Jajamaru Gekimadden are now playable</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Fixes for mappers 253 &amp; 226 - fixes games such as Fire Emblem (J) and Fire Emblem Gaiden (J)</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Fix crashing on game loading for any battery backed ROMs with mappers from MapInitTab (fixes Esper Dream 2 - Aratanaru Tatakai (J)</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">FDS - show name of missing bios file in error message</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">NewPPU - fixed sprite hit before 255 and for non transparent hits only, thanks to dwedit for providing the fix</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">.fm2 file format header now has an FDS flag</span></p>
<p><span class="rvts24"><br></span></p>
<ul style="text-indent: 0px; margin-left: 24px; list-style-position: outside;">
<li><span class="rvts22">Fixed mappers 82, 25, 21, and 18. &nbsp;Games such as SD Kiji Blader, Ganbare Goemon Gaiden, and Ganbare Goemon Gaiden 2, Jajamaru Gekimadden are now playable</span></li>
<li><span class="rvts22">Fixes for mappers 253 &amp; 226 - fixes games such as Fire Emblem (J) and Fire Emblem Gaiden (J)</span></li>
<li><span class="rvts22">Fix crashing on game loading for any battery backed ROMs with mappers from MapInitTab (fixes Esper Dream 2 - Aratanaru Tatakai (J)</span></li>
<li><span class="rvts22">FDS - show name of missing bios file in error message</span></li>
<li><span class="rvts22">NewPPU - fixed sprite hit before 255 and for non transparent hits only, thanks to dwedit for providing the fix</span></li>
<li><span class="rvts22">.fm2 file format header now has an FDS flag</span></li>
</ul>
<p><span class="rvts24"><br/></span></p>
<p><span class="rvts24">SDL</span></p>
<p><span class="rvts22"><br></span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">A GUI! &nbsp;A graphic user interface (using GTK) with many basic menu options</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">ported to SDL 1.3; compatibility maintained with 1.2</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">unix netplay is now functional; gtk network gui created</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">now prints the name of the mapper on ROM load</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">fixed dpad/joyhat support</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">VS unisystem keys now configable</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">changed default hotkeys and keys to match Win32</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">disallow --inputcfg gamepad0 and gamepad5</span></p>
<p><span class="rvts22"><br></span></p>
<p><span class="rvts22"><br/></span></p>
<ul style="text-indent: 0px; margin-left: 24px; list-style-position: outside;">
<li><span class="rvts22">A GUI! &nbsp;A graphic user interface (using GTK) with many basic menu options</span></li>
<li><span class="rvts22">ported to SDL 1.3; compatibility maintained with 1.2</span></li>
<li><span class="rvts22">unix netplay is now functional; gtk network gui created</span></li>
<li><span class="rvts22">now prints the name of the mapper on ROM load</span></li>
<li><span class="rvts22">fixed dpad/joyhat support</span></li>
<li><span class="rvts22">VS unisystem keys now configable</span></li>
<li><span class="rvts22">changed default hotkeys and keys to match Win32</span></li>
<li><span class="rvts22">disallow --inputcfg gamepad0 and gamepad5</span></li>
</ul>
<p><span class="rvts22"><br/></span></p>
<p><span class="rvts24">Win32</span></p>
<p><span class="rvts22"><br></span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Made savestate backups optional (config - enable - backup savestates)</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Made savestate compression togglable (config - enable - compress savestates)</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Cheats dialog - Pause while active checkbox</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Cheats dialog - Toggling a cheat in the cheats list now updates the active cheats count</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Debugger - added an auto-load feature</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Debugger - Fix so it doesn't crash if unminimized with no game loaded </span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Closing minimized windows no longer moves them the next time they get opened</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Lua console - added a menu</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Lua console - filename updates when lua scripts are dragged to emulator or recent filenames invoked</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Name Table Viewer - Fix for use with New PPU</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Trace Logger - Trace logger now logs the values of the stack pointer register</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">If a .fm2 file is drag and dropped with no ROM load, the open ROM dialog will appear</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">disable movie messages menu item</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Added more window positions bounds checks. Accounts for -32000 positions and less out-of-range too</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">TASEdit - Added interface functionality (save/load, running TASEdit mid-movie, etc.)</span></p>
<p><span class="rvts22"><br></span></p>
<p><span class="rvts22"><br/></span></p>
<ul style="text-indent: 0px; margin-left: 24px; list-style-position: outside;">
<li><span class="rvts22">Made savestate backups optional (config - enable - backup savestates)</span></li>
<li><span class="rvts22">Made savestate compression togglable (config - enable - compress savestates)</span></li>
<li><span class="rvts22">Cheats dialog - Pause while active checkbox</span></li>
<li><span class="rvts22">Cheats dialog - Toggling a cheat in the cheats list now updates the active cheats count</span></li>
<li><span class="rvts22">Debugger - added an auto-load feature</span></li>
<li><span class="rvts22">Debugger - Fix so it doesn't crash if unminimized with no game loaded </span></li>
<li><span class="rvts22">Closing minimized windows no longer moves them the next time they get opened</span></li>
<li><span class="rvts22">Lua console - added a menu</span></li>
<li><span class="rvts22">Lua console - filename updates when lua scripts are dragged to emulator or recent filenames invoked</span></li>
<li><span class="rvts22">Name Table Viewer - Fix for use with New PPU</span></li>
<li><span class="rvts22">Trace Logger - Trace logger now logs the values of the stack pointer register</span></li>
<li><span class="rvts22">If a .fm2 file is drag and dropped with no ROM load, the open ROM dialog will appear</span></li>
<li><span class="rvts22">disable movie messages menu item</span></li>
<li><span class="rvts22">Added more window positions bounds checks. Accounts for -32000 positions and less out-of-range too</span></li>
<li><span class="rvts22">TASEdit - Added interface functionality (save/load, running TASEdit mid-movie, etc.)</span></li>
</ul>
<p><span class="rvts22"><br/></span></p>
<p><span class="rvts24">Lua</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">New lua functions: gui.parsecolor(), joypad.getup(), joypad.getdown(), emu.emulating()</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Change gui.line, gui.box, joypad.get to function consistently with other lua emulators such as GENS rerecording</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">fixed zapper.read() to read movie data if a movie is playing. &nbsp;Also changed the struct values to x,y,fire. This breaks lua scripts that used it previous, sorry</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">gui.text() now has out of bounds checking</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Lua no longer unpauses the emulator when a script is loaded</span></p>
<p><span class="rvts22"><br></span></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour/iphone-website-generation">Create iPhone web-based documentation</a></p>
<ul style="text-indent: 0px; margin-left: 24px; list-style-position: outside;">
<li><span class="rvts22">New lua functions: gui.parsecolor(), joypad.getup(), joypad.getdown(), emu.emulating()</span></li>
<li><span class="rvts22">Change gui.line, gui.box, joypad.get to function consistently with other lua emulators such as GENS rerecording</span></li>
<li><span class="rvts22">fixed zapper.read() to read movie data if a movie is playing. &nbsp;Also changed the struct values to x,y,fire. This breaks lua scripts that used it previous, sorry</span></li>
<li><span class="rvts22">gui.text() now has out of bounds checking</span></li>
<li><span class="rvts22">Lua no longer unpauses the emulator when a script is loaded</span></li>
</ul>
<p><span class="rvts22"><br/></span></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/create-epub-ebooks">Full featured EBook editor</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>What's New? 2.1.4 (changelog)</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -57,141 +57,110 @@
<p>2.1.4 is a maintenance release that fixes these bugs in 2.1.4:</p>
<p>fix crash bug on .fcm convert</p>
<p>fix erroneous reporting of savestate past the end of movie error during read-only loadstates</p>
<p><br></p>
<p><br/></p>
<p>Released 31 May 2010</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts22">The 2.1.4 release fixes many bugs and adds new features compared to 2.1.3. In addition it also fixes up the movie code significantly; fixing implementation problems, loading speed, adding new features, and fixing bugs. </span></p>
<p><span class="rvts22"><br></span></p>
<p><span class="rvts22"><br/></span></p>
<p><span class="rvts23">Common </span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Added microphone support option. When enabled, Port 2 Start activates the Microphone</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Prevent .zip files containing no recognized files from causing crash</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Autohold - Added player 3 and 4 to autohold notification window, labeled controller input</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">mapper 19 savestate fix mirroring for "Dream Master (J)" corrected to "four-screen" by CRC check</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Disable auto-savestates during turbo </span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Fixed so Gotcha! auto-enables the zapper</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Autohold - Added player 3 and 4 to autohold notification window, labeled controller input</span></p>
<p><span class="rvts24"><br></span></p>
<ul style="text-indent: 0px; margin-left: 24px; list-style-position: outside;">
<li><span class="rvts22">Added microphone support option. When enabled, Port 2 Start activates the Microphone</span></li>
<li><span class="rvts22">Prevent .zip files containing no recognized files from causing crash</span></li>
<li><span class="rvts22">Autohold - Added player 3 and 4 to autohold notification window, labeled controller input</span></li>
<li><span class="rvts22">mapper 19 savestate fix mirroring for "Dream Master (J)" corrected to "four-screen" by CRC check</span></li>
<li><span class="rvts22">Disable auto-savestates during turbo </span></li>
<li><span class="rvts22">Fixed so Gotcha! auto-enables the zapper</span></li>
<li><span class="rvts22">Autohold - Added player 3 and 4 to autohold notification window, labeled controller input</span></li>
</ul>
<p><span class="rvts24"><br/></span></p>
<p><span class="rvts24">Movies</span></p>
<p><span class="rvts22"><br></span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Fully implemented "bulletproof" read-only</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Movie code now fully conforms to the Savestate section of the Laws of TAS</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Fixed a potential desync that plays out an extra frame without an update to the frame count involving heavy lua use, joypad.get, and a loadstate</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Movie support for microphone</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Movies now have a "finished" mode. &nbsp;If a playback stops the movie isn't cleared from memory, and can be replayed or a state loaded Similar functionality as DeSmuME and GENS rerecording</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">New PPU flag in movie headers (doesn't change an emulators PPU state when loading a movie)</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Much faster movie loading and movie-savestate loading</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Made gamepad 2 off by default (so less movies should have unused player 2 data)</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Implemented a "full savestate-movie load" mode similar to the implementation in VBA-rr and SNES9x-rr. &nbsp;In this mode loading a savestate in read+write doesn't truncate the movie to its frame count immediately. &nbsp;Instead it waits until input is recording into the movie (next frame). &nbsp;For win32 this feature is togglable in movie options and the context menu. &nbsp;For SDL this is off by default and a toggle will need to be added</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Movie + loadstate errors are handled more gracefully now, with more informative error messages and the movie doesn't have to stop if backups are enabled</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Fix PlayMovieFromBeginning when using a movie that starts from savestate</span></p>
<p><span class="rvts22"><br></span></p>
<p><span class="rvts22"><br/></span></p>
<ul style="text-indent: 0px; margin-left: 24px; list-style-position: outside;">
<li><span class="rvts22">Fully implemented "bulletproof" read-only</span></li>
<li><span class="rvts22">Movie code now fully conforms to the Savestate section of the Laws of TAS</span></li>
<li><span class="rvts22">Fixed a potential desync that plays out an extra frame without an update to the frame count involving heavy lua use, joypad.get, and a loadstate</span></li>
<li><span class="rvts22">Movie support for microphone</span></li>
<li><span class="rvts22">Movies now have a "finished" mode. &nbsp;If a playback stops the movie isn't cleared from memory, and can be replayed or a state loaded Similar functionality as DeSmuME and GENS rerecording</span></li>
<li><span class="rvts22">New PPU flag in movie headers (doesn't change an emulators PPU state when loading a movie)</span></li>
<li><span class="rvts22">Much faster movie loading and movie-savestate loading</span></li>
<li><span class="rvts22">Made gamepad 2 off by default (so less movies should have unused player 2 data)</span></li>
<li><span class="rvts22">Implemented a "full savestate-movie load" mode similar to the implementation in VBA-rr and SNES9x-rr. &nbsp;In this mode loading a savestate in read+write doesn't truncate the movie to its frame count immediately. &nbsp;Instead it waits until input is recording into the movie (next frame). &nbsp;For win32 this feature is togglable in movie options and the context menu. &nbsp;For SDL this is off by default and a toggle will need to be added</span></li>
<li><span class="rvts22">Movie + loadstate errors are handled more gracefully now, with more informative error messages and the movie doesn't have to stop if backups are enabled</span></li>
<li><span class="rvts22">Fix PlayMovieFromBeginning when using a movie that starts from savestate</span></li>
</ul>
<p><span class="rvts22"><br/></span></p>
<p><span class="rvts24">Lua</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">fix bug that caused zapper.read() to crash when movie playback ends</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Win32 - Added option for palette selection as color for LUA colors. Included is a LUA script to display all choices with the value used to pick displayed color</span></p>
<p><span class="rvts22"><br></span></p>
<ul style="text-indent: 0px; margin-left: 24px; list-style-position: outside;">
<li><span class="rvts22">fix bug that caused zapper.read() to crash when movie playback ends</span></li>
<li><span class="rvts22">Win32 - Added option for palette selection as color for LUA colors. Included is a LUA script to display all choices with the value used to pick displayed color</span></li>
</ul>
<p><span class="rvts22"><br/></span></p>
<p><span class="rvts22">New Lua functions</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">movie.ispoweron()</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">movie.isfromsavestate()</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">emu.addgamegenie()</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">emu.delgamegenie()</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">savestate.object() which is savestate.create() with intuitive numbering under windows</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">gui.getpixel() which gets any gui.pixel() set pixel colors, and possibly other functions</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">emu.getscreenpixel() which gets the RGB and Palette of any pixel on the screen</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">lua function movie.getfilename() which returns the current movie filename without the path included</span></p>
<p><span class="rvts22"><br></span></p>
<ul style="text-indent: 0px; margin-left: 24px; list-style-position: outside;">
<li><span class="rvts22">movie.ispoweron()</span></li>
<li><span class="rvts22">movie.isfromsavestate()</span></li>
<li><span class="rvts22">emu.addgamegenie()</span></li>
<li><span class="rvts22">emu.delgamegenie()</span></li>
<li><span class="rvts22">savestate.object() which is savestate.create() with intuitive numbering under windows</span></li>
<li><span class="rvts22">gui.getpixel() which gets any gui.pixel() set pixel colors, and possibly other functions</span></li>
<li><span class="rvts22">emu.getscreenpixel() which gets the RGB and Palette of any pixel on the screen</span></li>
<li><span class="rvts22">lua function movie.getfilename() which returns the current movie filename without the path included</span></li>
</ul>
<p><span class="rvts22"><br/></span></p>
<p><span class="rvts24">Input Display</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Input display updates on loadstate</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Input display overhaul that uses different colors for different input contexts</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Input display now shows both currently pressed buttons and buttons held the previous frame</span></p>
<p><span class="rvts22"><br></span></p>
<ul style="text-indent: 0px; margin-left: 24px; list-style-position: outside;">
<li><span class="rvts22">Input display updates on loadstate</span></li>
<li><span class="rvts22">Input display overhaul that uses different colors for different input contexts</span></li>
<li><span class="rvts22">Input display now shows both currently pressed buttons and buttons held the previous frame</span></li>
</ul>
<p><span class="rvts22"><br/></span></p>
<p><span class="rvts24">Win32</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Added NTSC 2x scalar option with some CFG config options of it's own Added Ram Search hotkeys for the first 6 search types in the list</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Add Cheat buttons for Ram Search and Ram Watch</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">With special scaler in window mode, it's possible to resize to anything above the minimum.</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Recording a new movie adds it to recent movies list</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Replay dialog, when selecting a movie in a relative path (.\movies for example), the recent movies list stores an absolute path instead</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Replay dialog shows PAL flag and New PPU flags</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">CDLogger - fixed bug preventing correct interrupt vectors from logging</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Memwatch - ignore spaces at the beginnign of an address in the address boxes</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Replay dialog - fix bug that was causing it to always report savestate movies as soft-reset</span></p>
<p><span class="rvts22"><br></span></p>
<ul style="text-indent: 0px; margin-left: 24px; list-style-position: outside;">
<li><span class="rvts22">Added NTSC 2x scalar option with some CFG config options of it's own Added Ram Search hotkeys for the first 6 search types in the list</span></li>
<li><span class="rvts22">Add Cheat buttons for Ram Search and Ram Watch</span></li>
<li><span class="rvts22">With special scaler in window mode, it's possible to resize to anything above the minimum.</span></li>
<li><span class="rvts22">Recording a new movie adds it to recent movies list</span></li>
<li><span class="rvts22">Replay dialog, when selecting a movie in a relative path (.\movies for example), the recent movies list stores an absolute path instead</span></li>
<li><span class="rvts22">Replay dialog shows PAL flag and New PPU flags</span></li>
<li><span class="rvts22">CDLogger - fixed bug preventing correct interrupt vectors from logging</span></li>
<li><span class="rvts22">Memwatch - ignore spaces at the beginnign of an address in the address boxes</span></li>
<li><span class="rvts22">Replay dialog - fix bug that was causing it to always report savestate movies as soft-reset</span></li>
</ul>
<p><span class="rvts22"><br/></span></p>
<p><span class="rvts23">Debugger</span></p>
<p><span class="rvts22"><br></span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Added conditional debugging option 'K', for bank PC is on</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Fixed bug involving pausing emulation outside of the debugger, then trying to use the debugger commands, and having the CPU registers become corrupted</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Made debugger able to break on and distinguish Stack reads/writes</span></p>
<p><span class="rvts22"><br></span></p>
<p><span class="rvts22"><br/></span></p>
<ul style="text-indent: 0px; margin-left: 24px; list-style-position: outside;">
<li><span class="rvts22">Added conditional debugging option 'K', for bank PC is on</span></li>
<li><span class="rvts22">Fixed bug involving pausing emulation outside of the debugger, then trying to use the debugger commands, and having the CPU registers become corrupted</span></li>
<li><span class="rvts22">Made debugger able to break on and distinguish Stack reads/writes</span></li>
</ul>
<p><span class="rvts22"><br/></span></p>
<p><span class="rvts24">Hex Editor</span></p>
<p><span class="rvts22"><br></span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Added "Goto" command</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Made the Hex Editor display the Frozen, Bookmarked, etc. status of the selected address, and made the Frozen color override the Bookmarked color.</span></p>
<p><span class="rvts22"><br></span></p>
<p><span class="rvts22"><br/></span></p>
<ul style="text-indent: 0px; margin-left: 24px; list-style-position: outside;">
<li><span class="rvts22">Added "Goto" command</span></li>
<li><span class="rvts22">Made the Hex Editor display the Frozen, Bookmarked, etc. status of the selected address, and made the Frozen color override the Bookmarked color.</span></li>
</ul>
<p><span class="rvts22"><br/></span></p>
<p><span class="rvts24">Cheat Search</span></p>
<p><span class="rvts22"><br></span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Made enabling/disabling cheats no longer deselect the selected cheat</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Added context menu to Cheat Dialog Cheat Listbox, populated list with Toggle Cheat, Poke Cheat Value, and Goto In Hex Editor</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Enabled multi-select for Cheat menu to allow multiple toggles and deletes</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Made cheat menu's Pause When Active effect immediate</span></p>
<p><span class="rvts22"><br></span></p>
<p><span class="rvts22"><br/></span></p>
<ul style="text-indent: 0px; margin-left: 24px; list-style-position: outside;">
<li><span class="rvts22">Made enabling/disabling cheats no longer deselect the selected cheat</span></li>
<li><span class="rvts22">Added context menu to Cheat Dialog Cheat Listbox, populated list with Toggle Cheat, Poke Cheat Value, and Goto In Hex Editor</span></li>
<li><span class="rvts22">Enabled multi-select for Cheat menu to allow multiple toggles and deletes</span></li>
<li><span class="rvts22">Made cheat menu's Pause When Active effect immediate</span></li>
</ul>
<p><span class="rvts22"><br/></span></p>
<p><span class="rvts24">GUI</span></p>
<p><span class="rvts22"><br></span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Added Tools - GUI option to partially disable visual themes, so the emulator can be made to look like it did in 2.1.1 and earlier releases. Drag &amp; Drop - if dropping a .fcm with no ROM loaded, prompt for one (same functionality that was added to .fm2 files)</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Added single-instance mode, which makes starting a second copy of FCEUX load the file into the first, then exit.Mode off by default, togglable under Config - GUI</span></p>
<p><span class="rvts22"><br></span></p>
<p><span class="rvts22"><br></span></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour">Full featured Help generator</a></p>
<p><span class="rvts22"><br/></span></p>
<ul style="text-indent: 0px; margin-left: 24px; list-style-position: outside;">
<li><span class="rvts22">Added Tools - GUI option to partially disable visual themes, so the emulator can be made to look like it did in 2.1.1 and earlier releases. Drag &amp; Drop - if dropping a .fcm with no ROM loaded, prompt for one (same functionality that was added to .fm2 files)</span></li>
<li><span class="rvts22">Added single-instance mode, which makes starting a second copy of FCEUX load the file into the first, then exit.Mode off by default, togglable under Config - GUI</span></li>
</ul>
<p><span class="rvts22"><br/></span></p>
<p><span class="rvts22"><br/></span></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/help-authoring-tool">Single source CHM, PDF, DOC and HTML Help creation</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>What's New? 2.1.5 (changelog)</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -54,85 +54,82 @@
<p><span class="rvts17">What's New? </span><span class="rvts21">2.1.5</span></p>
<p>Released 04 June 2011</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p>The 2.1.5 release fixes a lot of bugs and brings various improvements to the prior 2.1.4a release. In addition, the SDL port has improved signficantly; completely overhauling the GTK2 GUI, fixing many sound issues, and fixing a variety of bugs.</p>
<p><br></p>
<p><br/></p>
<p><span class="rvts23">Common </span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Fixed compatibility issue with Young Indiana Jones Chronicals.</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Fixed bug in new PPU that made some intensify bits not get applied to output (fixed flashing siren screen in Werefolf).</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Fix many segmentation faults related to file handling.</span></p>
<p><span class="rvts24"><br></span></p>
<ul style="text-indent: 0px; margin-left: 24px; list-style-position: outside;">
<li><span class="rvts22">Fixed compatibility issue with Young Indiana Jones Chronicals.</span></li>
<li><span class="rvts22">Fixed bug in new PPU that made some intensify bits not get applied to output (fixed flashing siren screen in Werefolf).</span></li>
<li><span class="rvts22">Fix many segmentation faults related to file handling.</span></li>
</ul>
<p><span class="rvts24"><br/></span></p>
<p><span class="rvts24">Movies</span></p>
<p><span class="rvts22"><br></span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Slight performance increase when loading movies.</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Fixed read-only loadstate error messages and logic.</span></p>
<p><span class="rvts22"><br></span></p>
<p><span class="rvts22"><br/></span></p>
<ul style="text-indent: 0px; margin-left: 24px; list-style-position: outside;">
<li><span class="rvts22">Slight performance increase when loading movies.</span></li>
<li><span class="rvts22">Fixed read-only loadstate error messages and logic.</span></li>
</ul>
<p><span class="rvts22"><br/></span></p>
<p><span class="rvts24">Lua</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Lua socket added to built-in lua library.</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Fixed speed.mode() function so that normal turns off turbo.</span></p>
<p><span class="rvts22"><br></span></p>
<ul style="text-indent: 0px; margin-left: 24px; list-style-position: outside;">
<li><span class="rvts22">Lua socket added to built-in lua library.</span></li>
<li><span class="rvts22">Fixed speed.mode() function so that normal turns off turbo.</span></li>
</ul>
<p><span class="rvts22"><br/></span></p>
<p><span class="rvts22">New Lua functions</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">gui.savescreenshotas()</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">sound.get()</span></p>
<p><span class="rvts22"><br></span></p>
<ul style="text-indent: 0px; margin-left: 24px; list-style-position: outside;">
<li><span class="rvts22">gui.savescreenshotas()</span></li>
<li><span class="rvts22">sound.get()</span></li>
</ul>
<p><span class="rvts22"><br/></span></p>
<p><span class="rvts24">Win32</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Fixed bug where PPU toggling toggled the Game Genie as well</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Fixed some minor GUI issues.</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Added avi capture commandline argument and related parameters.</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Fix input selection for Famicom Expansion port.</span></p>
<p><span class="rvts22"><br></span></p>
<ul style="text-indent: 0px; margin-left: 24px; list-style-position: outside;">
<li><span class="rvts22">Fixed bug where PPU toggling toggled the Game Genie as well</span></li>
<li><span class="rvts22">Fixed some minor GUI issues.</span></li>
<li><span class="rvts22">Added avi capture commandline argument and related parameters.</span></li>
<li><span class="rvts22">Fix input selection for Famicom Expansion port.</span></li>
</ul>
<p><span class="rvts22"><br/></span></p>
<p><span class="rvts23">Debugger</span></p>
<p><span class="rvts22"><br></span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Fixed Ram Search to only display valid RAM addresses (0000-07FF and 6000-7FFF).</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Fixed crash when re-opening debugging window.</span></p>
<p><span class="rvts22"><br></span></p>
<p><span class="rvts22"><br/></span></p>
<ul style="text-indent: 0px; margin-left: 24px; list-style-position: outside;">
<li><span class="rvts22">Fixed Ram Search to only display valid RAM addresses (0000-07FF and 6000-7FFF).</span></li>
<li><span class="rvts22">Fixed crash when re-opening debugging window.</span></li>
</ul>
<p><span class="rvts22"><br/></span></p>
<p><span class="rvts23">Hex Editor</span></p>
<p><span class="rvts22"><br></span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Added a confirmation prompt before removing all bookmarks.</span></p>
<p><span class="rvts22"><br></span></p>
<p><span class="rvts22"><br/></span></p>
<ul style="text-indent: 0px; margin-left: 24px; list-style-position: outside;">
<li><span class="rvts22">Added a confirmation prompt before removing all bookmarks.</span></li>
</ul>
<p><span class="rvts22"><br/></span></p>
<p><span class="rvts23">Ram Watch / Ram Search</span></p>
<p><span class="rvts22"><br></span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Fixed the multiple selection of watches.</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Added support for Multiple selection of addresses in RamWatch Fixed issue with restoration of the selection range in RamWatch.</span></p>
<p><span class="rvts22"><br></span></p>
<p><span class="rvts22"><br/></span></p>
<ul style="text-indent: 0px; margin-left: 24px; list-style-position: outside;">
<li><span class="rvts22">Fixed the multiple selection of watches.</span></li>
<li><span class="rvts22">Added support for Multiple selection of addresses in RamWatch Fixed issue with restoration of the selection range in RamWatch.</span></li>
</ul>
<p><span class="rvts22"><br/></span></p>
<p><span class="rvts23">TasEdit</span></p>
<p><span class="rvts22"><br></span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">General cleanup.</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Fixed crash when truncating while turbo was enabled.</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Invalidate greenzone when re-recording earlier portions of a movie.</span></p>
<p><span class="rvts22"><br></span></p>
<p><span class="rvts22"><br/></span></p>
<ul style="text-indent: 0px; margin-left: 24px; list-style-position: outside;">
<li><span class="rvts22">General cleanup.</span></li>
<li><span class="rvts22">Fixed crash when truncating while turbo was enabled.</span></li>
<li><span class="rvts22">Invalidate greenzone when re-recording earlier portions of a movie.</span></li>
</ul>
<p><span class="rvts22"><br/></span></p>
<p><span class="rvts23">GUI</span></p>
<p><span class="rvts22"><br></span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Added "SaveStateAs" menu item.</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Display movie name at the top of the main window.</span></p>
<p><span class="rvts22"><br></span></p>
<p><span class="rvts22"><br></span></p>
<p><span class="rvts22"><br></span></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/help-authoring-tool">Single source CHM, PDF, DOC and HTML Help creation</a></p>
<p><span class="rvts22"><br/></span></p>
<ul style="text-indent: 0px; margin-left: 24px; list-style-position: outside;">
<li><span class="rvts22">Added "SaveStateAs" menu item.</span></li>
<li><span class="rvts22">Display movie name at the top of the main window.</span></li>
</ul>
<p><span class="rvts22"><br/></span></p>
<p><span class="rvts22"><br/></span></p>
<p><span class="rvts22"><br/></span></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/help-authoring-tool">Free help authoring tool</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>What's New? 2.1.6 (changelog)</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -54,139 +54,134 @@
<p><span class="rvts17">What's New? </span><span class="rvts21">2.1.6</span></p>
<p>Released -- ???? 2012</p>
<p><br></p>
<p><br></p>
<p>The 2.1.6 release fixes many bugs and adds new features to the prior 2.1.5 release. The most significant feature is new TAS Editor v1.0, created to boost efficiency and ease of Tool-Assisted Speedrunning.</p>
<p><span class="rvts24"><br></span></p>
<p><br/></p>
<p><br/></p>
<p>The 2.1.6 release fixes a lot of bugs and adds many new features to prior releases, <span class="rvts22">increasing game compatibility and enhancing usability of both Windows and SDL ports</span>. The most significant feature of Windows version is TAS Editor v1.0, created to boost efficiency and ease of Tool-Assisted Speedrunning. Debugging tools were also improved.</p>
<p><span class="rvts24"><br/></span></p>
<p><span class="rvts23">Common </span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Fixed crash when using machine with no sound card</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Fixed long savestate messages containing path</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Soft reset and power switch messages</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">All onscreen messages are now logged to Message Log</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Improved hud text rendering wrapping</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Fixed wrong default palette entry</span></p>
<p><span class="rvts24"><br></span></p>
<ul style="text-indent: 0px; margin-left: 24px; list-style-position: outside;">
<li><span class="rvts22">Fixed crash when using machine with no sound card</span></li>
<li><span class="rvts22">Fixed long savestate messages containing path</span></li>
<li><span class="rvts22">Soft reset and power switch messages</span></li>
<li><span class="rvts22">All onscreen messages are now logged to Message Log</span></li>
<li><span class="rvts22">Improved HUD text rendering wrapping</span></li>
<li><span class="rvts22">Fixed wrong default palette entry</span></li>
<li><span class="rvts22">Fixed bug when loading UNF games</span></li>
</ul>
<p><span class="rvts24"><br/></span></p>
<p><span class="rvts24">Emulation</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">PAL/NTSC noise bug fixed</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Fixed newppu bug which prevented metroid from booting, CHR RAM was not getting initialized to anything</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Newppu - fix bug in scroll reg logic causing mis-scrolls in p'radikus conflict</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">A bit of latest mapper changes from fceu-mm</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Fixed mappers 242, 227, 115, 248, 12, 164, 15, 253, 23, 178</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Added mappers 176, 116</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Straighten out bandai m159/m016 handling and add valid null-EEPROM emulation to get those games booting.</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Add ability for CNROM games to choose whether they have bus conflicts (fixes Colorful Dragon (Unl) (Sachen), since it flakes out if bus conflicts are emulated)</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Fixed bus conflict emulation, no kage no densetsu bug anymore</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Datalatch mapper - fix bug where wramless games would be able to do something to unmapped host emulator memory</span></p>
<p><span class="rvts24"><br></span></p>
<ul style="text-indent: 0px; margin-left: 24px; list-style-position: outside;">
<li><span class="rvts22">PAL/NTSC noise bug fixed</span></li>
<li><span class="rvts22">Fixed newppu bug which prevented metroid from booting, CHR RAM was not getting initialized to anything</span></li>
<li><span class="rvts22">Newppu - fix bug in scroll reg logic causing mis-scrolls in p'radikus conflict</span></li>
<li><span class="rvts22">A bit of latest mapper changes from fceu-mm</span></li>
<li><span class="rvts22">Fixed mappers 242, 227, 115, 248, 12, 164, 15, 253, 23, 178</span></li>
<li><span class="rvts22">Added mappers 176, 116</span></li>
<li><span class="rvts22">Straighten out bandai m159/m016 handling and add valid null-EEPROM emulation to get those games booting.</span></li>
<li><span class="rvts22">Add ability for CNROM games to choose whether they have bus conflicts (fixes Colorful Dragon (Unl) (Sachen), since it flakes out if bus conflicts are emulated)</span></li>
<li><span class="rvts22">Fixed bus conflict emulation, no kage no densetsu bug anymore</span></li>
<li><span class="rvts22">Datalatch mapper - fix bug where wramless games would be able to do something to unmapped host emulator memory</span></li>
</ul>
<p><span class="rvts24"><br/></span></p>
<p><span class="rvts24">Movies</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Fixed old bug in "Play Movie From Beginning"</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Added support for HUD recording in AVI dumping</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Rerecord counter display</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Config-&gt;Movie options-&gt;Always suggest Read-Only replay (for Replay dialog). No more accidental rewrites!</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Removed "Lag Counter Reset" hotkey, as it was obsolete since FCEUX 2.0.2</span></p>
<p><span class="rvts24"><br></span></p>
<ul style="text-indent: 0px; margin-left: 24px; list-style-position: outside;">
<li><span class="rvts22">Fixed old bug in "Play Movie From Beginning"</span></li>
<li><span class="rvts22">Added support for HUD recording in AVI dumping</span></li>
<li><span class="rvts22">Rerecord counter display</span></li>
<li><span class="rvts22">Config-&gt;Movie options-&gt;Always suggest Read-Only replay (for Replay dialog). No more accidental rewrites!</span></li>
<li><span class="rvts22">Removed "Lag Counter Reset" hotkey, as it was obsolete since FCEUX 2.0.2</span></li>
</ul>
<p><span class="rvts24"><br/></span></p>
<p><span class="rvts24">Lua</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Fixed lua drawing alpha blending</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">New library: taseditor (Windows-only) - contains 24 functions, see taseditor.chm</span></p>
<p><span class="rvts22"><br></span></p>
<ul style="text-indent: 0px; margin-left: 24px; list-style-position: outside;">
<li><span class="rvts22">Fixed lua drawing alpha blending</span></li>
<li><span class="rvts22">New library: taseditor (Windows-only) - contains 24 functions, see taseditor.chm</span></li>
</ul>
<p><span class="rvts22"><br/></span></p>
<p><span class="rvts22">New Lua functions</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">emu.paused()</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">joypad.getimmediate()</span></p>
<p><span class="rvts22"><br></span></p>
<ul style="text-indent: 0px; margin-left: 24px; list-style-position: outside;">
<li><span class="rvts22">emu.paused()</span></li>
<li><span class="rvts22">joypad.getimmediate()</span></li>
</ul>
<p><span class="rvts22"><br/></span></p>
<p><span class="rvts22">New scripts:</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">ButtonCount.lua</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">RBIBaseball.lua</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">SoundDisplay.lua</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">SoundDisplay2.lua</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">taseditor\InputDisplay_for_Selection.lua</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">taseditor\InvertSelection.lua</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">taseditor\RecordBackwards.lua</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">taseditor\ShowNotes.lua</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">taseditor\Swap1P2P.lua</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">taseditor\TrackNoise.lua</span></p>
<p><span class="rvts24"><br></span></p>
<ul style="text-indent: 0px; margin-left: 24px; list-style-position: outside;">
<li><span class="rvts22">ButtonCount.lua</span></li>
<li><span class="rvts22">RBIBaseball.lua</span></li>
<li><span class="rvts22">SoundDisplay.lua</span></li>
<li><span class="rvts22">SoundDisplay2.lua</span></li>
<li><span class="rvts22">taseditor\InputDisplay_for_Selection.lua</span></li>
<li><span class="rvts22">taseditor\InvertSelection.lua</span></li>
<li><span class="rvts22">taseditor\RecordBackwards.lua</span></li>
<li><span class="rvts22">taseditor\ShowNotes.lua</span></li>
<li><span class="rvts22">taseditor\Swap1P2P.lua</span></li>
<li><span class="rvts22">taseditor\TrackNoise.lua</span></li>
</ul>
<p><span class="rvts24"><br/></span></p>
<p><span class="rvts24">Win32</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Lua console now gets proper file path when selecting a file from the recent menu</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Fixed crashes and bugs caused by 2.1.5 allowing hotkeys without ROM loaded</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Fixed context menus to use rightclicks in context menus correctly</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Reload hotkey now also supports removing invalid filenames in Recent ROMs</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Replay dialog speedup, it doesn't search for movies in fceux root folder anymore</span></p>
<p><span class="rvts24"><br></span></p>
<p><span class="rvts23">Debugger</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Fixed mysterious out of bounds condition while editing breakpoints</span></p>
<p><span class="rvts24"><br></span></p>
<p><span class="rvts23">Cheats</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Don't lose cheat compare value when toggle cheat enables through UI</span></p>
<p><span class="rvts24"><br></span></p>
<p><span class="rvts23">Ram Watch / Ram Search</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Updating list when emulator is paused (on Power or when resetting search)</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Fixed loading Data Size and Data Type from a .wch, now corrupted .wch won't crash</span></p>
<p><span class="rvts24"><br></span></p>
<ul style="text-indent: 0px; margin-left: 24px; list-style-position: outside;">
<li><span class="rvts22">Lua console now gets proper file path when selecting a file from the recent menu</span></li>
<li><span class="rvts22">Fixed crashes and bugs caused by 2.1.5 allowing hotkeys without ROM loaded</span></li>
<li><span class="rvts22">Fixed context menus to use rightclicks in context menus correctly</span></li>
<li><span class="rvts22">Reload hotkey now also supports removing invalid filenames in Recent ROMs</span></li>
<li><span class="rvts22">Replay dialog speedup, it doesn't search for movies in fceux root folder anymore</span></li>
</ul>
<p><span class="rvts24"><br/></span></p>
<p><span class="rvts23">TAS Editor</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Completely rewritten tool with brand new architecture and design. Too many changes to enlist, see taseditor.chm</span></p>
<p><span class="rvts24"><br></span></p>
<ul style="text-indent: 0px; margin-left: 24px; list-style-position: outside;">
<li><span class="rvts22">Completely rewritten tool with brand new architecture and design. Too many changes to enlist, see taseditor.chm</span></li>
</ul>
<p><span class="rvts24"><br/></span></p>
<p><span class="rvts23">Debugger</span></p>
<ul style="text-indent: 0px; margin-left: 24px; list-style-position: outside;">
<li><span class="rvts22">General window layout cleanup; bigger font; "Load .DEB" can be switched off; etc</span></li>
<li><span class="rvts22">Fixed mysterious out of bounds condition while editing breakpoints</span></li>
<li><span class="rvts22">Fixed RAM peek by a rightclick on left pane</span></li>
<li><span class="rvts22">Allow Frame Advancing when Debugger is in breakpoint state</span></li>
<li><span class="rvts22">When a breakpoint is triggered it becomes highlighed (selected) in breakpoints list</span></li>
<li><span class="rvts22">Show the number of breakpoints (enabled and total) above the breakpoints list</span></li>
<li><span class="rvts22">"&gt;" shows current line in disassembly</span></li>
<li><span class="rvts22">Improved stack display</span></li>
<li><span class="rvts22">Added "CPU cycles" and "Instructions" counters (cumulative and delta) useful for profiling</span></li>
<li><span class="rvts22">Added "Cycles counter exceeds N" and "Instructions counter exceeds N" type of breakpoints</span></li>
<li><span class="rvts22">Doubleclick on the disassembly prompts "Add Execute breakpoint here" dialog</span></li>
</ul>
<p><span class="rvts24"><br/></span></p>
<p><span class="rvts23">Trace Logger</span></p>
<ul style="text-indent: 0px; margin-left: 24px; list-style-position: outside;">
<li><span class="rvts22">Added "Use Stack Pointer for lines tabbing (nesting visualization)" option</span></li>
<li><span class="rvts22">Added "To the left from disassembly text" option for log format customization</span></li>
<li><span class="rvts22">Fixed bug with trying to log to file without choosing a filename</span></li>
<li><span class="rvts22">Tracer now also updates its window when user pauses the game, not just when Debugger snaps</span></li>
</ul>
<p><span class="rvts24"><br/></span></p>
<p><span class="rvts23">Ram Watch / Ram Search</span></p>
<ul style="text-indent: 0px; margin-left: 24px; list-style-position: outside;">
<li><span class="rvts22">Updating list when emulator is paused (on Power or when resetting search)</span></li>
<li><span class="rvts22">Fixed loading Data Size and Data Type from a .wch, now corrupted .wch won't crash</span></li>
</ul>
<p><span class="rvts24"><br/></span></p>
<p><span class="rvts23">Cheats</span></p>
<ul style="text-indent: 0px; margin-left: 24px; list-style-position: outside;">
<li><span class="rvts22">Don't lose cheat compare value when toggle cheat enables through UI</span></li>
<li><span class="rvts22">Parse cheat files with non-ASCII characters properly</span></li>
</ul>
<p><span class="rvts24"><br/></span></p>
<p><span class="rvts23">GUI</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Support multibyte languages for opening roms, at least through drag&amp;drop</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Loading TAS Editor projects (*.fm3) by drag&amp;drop</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Fixed graphic tearing with vertical sync enabled in windowed mode</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Fixed bug with Input Config not displaying some key names</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Changed some checkboxes to radiobuttons in menu</span></p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts22">Launch tools hotkeys shown in menu; general cleanup of menu/settings</span></p>
<p><span class="rvts22"><br></span></p>
<p><span class="rvts22"><br></span></p>
<p><span class="rvts22"><br></span></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com">Easy CHM and documentation editor</a></p>
<ul style="text-indent: 0px; margin-left: 24px; list-style-position: outside;">
<li><span class="rvts22">Support multibyte languages for opening files through drag&amp;drop (except Lua files)</span></li>
<li><span class="rvts22">Loading TAS Editor projects (*.fm3) by drag&amp;drop</span></li>
<li><span class="rvts22">Fixed graphic tearing with vertical sync enabled in windowed mode</span></li>
<li><span class="rvts22">Fixed bug with Input Config not displaying some key names</span></li>
<li><span class="rvts22">Changed some checkboxes to radiobuttons in menu</span></li>
<li><span class="rvts22">Launch tools hotkeys shown in menu; general cleanup of menu/settings</span></li>
</ul>
<p><span class="rvts22"><br/></span></p>
<p><span class="rvts22"><br/></span></p>
<p><span class="rvts22"><br/></span></p>
<p><span class="rvts22"><br/></span></p>
<p><span class="rvts22"><br/></span></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com">Free Web Help generator</a></p>
</div>
<div id="topic_footer">

View File

@ -90,7 +90,18 @@ body {
#popupMenu a{
display: block;
padding: 5px 5px 2px 5px;
margin: 5px 10px 2px 5px;
}
.close-button{
color: #666;
cursor: hand;
cursor: pointer;
float: right;
font-size: 10px;
position: relative;
top: -5px;
right: -3px;
}
/* Search highlight */

View File

@ -36,24 +36,24 @@ a.rvts5, span.rvts5 /* Jump 2 */
}
span.rvts6
{
color: #71593e;
color: #aca899;
}
span.rvts7
{
font-size: 15pt;
font-family: 'Tahoma', 'Geneva', sans-serif;
font-weight: bold;
color: #404040;
color: #716f64;
}
span.rvts8
{
font-weight: bold;
color: #71593e;
color: #aca899;
}
span.rvts9
{
font-style: italic;
color: #71593e;
color: #aca899;
}
span.rvts10
{

View File

@ -4,10 +4,9 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<title>FCEUX Help</title>
<script type="text/javascript">
<!--
var sTopic = "";
if (top.location.href.lastIndexOf("?") > 0)
sTopic = top.location.href.substring(top.location.href.lastIndexOf("?") + 1, top.location.href.length);
@ -16,7 +15,6 @@
document.write('<frame src="toc.html" name="FrameTOC">');
document.write('<frame src="' + sTopic + '" name="FrameMain">');
document.write('</frameset>');
//-->
</script>
</head>

View File

@ -3,7 +3,7 @@
<head>
<title>.fcm</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -54,35 +54,35 @@
<p><span class="rvts12">FCE Ultra Movie File Format</span></p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;- Updated March 22, 2004</p>
<p><br></p>
<p><br/></p>
<p>The FCM file format is a somewhat "joined" file format. &nbsp;The first part of a FCM</p>
<p>file will contain an FCS-format state save. &nbsp;After this data, the FCM-specific data</p>
<p>begins, which is being referred to from this point.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p>Currently, the only supported input scheme for a FCM is four joysticks.</p>
<p><br></p>
<p><br/></p>
<p>The FCM data consists of a stream of joystick commands:</p>
<p><br></p>
<p><br/></p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;dLLjjbbb</p>
<p><br></p>
<p><br/></p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;d &nbsp;= Dummy update, if set. &nbsp;Used to reset frame timestamp.</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;LL &nbsp;= timestamp length, in bytes(maximum of 3 bytes).</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;jj &nbsp;= Which joystick(0-3).</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;bbb = Which button(0-7).</p>
<p><br></p>
<p><br/></p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;If the dummy update bit is set, a command can also have occurred. &nbsp;Look at the</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;lower 5 bits:</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0 &nbsp; &nbsp; &nbsp; &nbsp;= &nbsp; &nbsp; &nbsp; &nbsp;Just a dummy update.</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;1 &nbsp; &nbsp; &nbsp; &nbsp;= &nbsp; &nbsp; &nbsp; &nbsp;Reset</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;2 &nbsp; &nbsp; &nbsp; &nbsp;= &nbsp; &nbsp; &nbsp; &nbsp;Power</p>
<p><br></p>
<p><br/></p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;The timestamp is stored after the joystick command, in LSB-first format. &nbsp;It is</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;the number of frames since the last event. &nbsp;A timestamp length of "0" is valid, to</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;be used when several different buttons need to change state at the same time(same frame,</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;at least).</p>
<p><br></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com">Easy CHM and documentation editor</a></p>
<p><br/></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/help-authoring-tool">Create HTML Help, DOC, PDF and print manuals from 1 single source</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>Savestate (.fcs)</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -55,18 +55,18 @@
<p>FCE Ultra Save State Format</p>
<p> Updated: &nbsp;Mar 9, 2003</p>
<p>---------------------------------------</p>
<p><br></p>
<p><br/></p>
<p>FCE Ultra's save state format is now designed to be as forward and backwards</p>
<p>compatible as possible. &nbsp;This is achieved through the (over)use of chunks.</p>
<p>All multiple-byte variables are stored LSB(least significant byte)-first.</p>
<p>Data types:</p>
<p><br></p>
<p><br/></p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;(u)int8 - (un)signed 8 bit variable(also referred to as "byte")</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;(u)int16 - (un)signed 16 bit variable</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;(u)int32 - (un)signed 32 bit variable</p>
<p><br></p>
<p><br/></p>
<p>-- Main File Header:</p>
<p><br></p>
<p><br/></p>
<p>The main file header is 16-bytes in length. &nbsp;The first three bytes contain</p>
<p>the string "FCS". &nbsp;The next byte contains the version of FCE Ultra that saved</p>
<p>this save state. &nbsp;This document only applies to version "53"(.53) and higher.</p>
@ -75,46 +75,46 @@
<p>field will be used. &nbsp;In this field, a version such as 0.98.10 is stored as "9810"(decimal).</p>
<p>The rest of the header is currently unused and should be nulled out. &nbsp;</p>
<p>Example of relevant parts:</p>
<p><br></p>
<p><br/></p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;FCS &lt;uint8 oldversion&gt; &lt;uint32 totalsize&gt; &lt;uint32 version&gt;</p>
<p><br></p>
<p><br/></p>
<p>-- Section Chunks:</p>
<p><br></p>
<p><br/></p>
<p>Sections chunk headers are 5-bytes in length. &nbsp;The first byte defines what </p>
<p>section it &nbsp;is, the next four bytes define the total size of the section</p>
<p>(including the section chunk header).</p>
<p><br></p>
<p><br/></p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;&lt;uint8 section&gt; &lt;uint32 size&gt;</p>
<p><br></p>
<p><br/></p>
<p>Section definitions:</p>
<p><br></p>
<p><br/></p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;1 &nbsp; &nbsp; &nbsp; &nbsp;- &nbsp; &nbsp; &nbsp; &nbsp;"CPU"</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;2 &nbsp; &nbsp; &nbsp; &nbsp;- &nbsp; &nbsp; &nbsp; &nbsp;"CPUC"</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;3 &nbsp; &nbsp; &nbsp; &nbsp;- &nbsp; &nbsp; &nbsp; &nbsp;"PPU"</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;4 &nbsp; &nbsp; &nbsp; &nbsp;- &nbsp; &nbsp; &nbsp; &nbsp;"CTLR"</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;5 &nbsp; &nbsp; &nbsp; &nbsp;- &nbsp; &nbsp; &nbsp; &nbsp;"SND"</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;16 &nbsp; &nbsp; &nbsp; &nbsp;- &nbsp; &nbsp; &nbsp; &nbsp;"EXTRA"</p>
<p><br></p>
<p><br/></p>
<p>-- Subsection Chunks</p>
<p><br></p>
<p><br/></p>
<p>Subsection chunks are stored within section chunks. &nbsp;They contain the actual</p>
<p>state data. &nbsp;Each subsection chunk is composed of an 8-byte header and the data.</p>
<p>The header contains a description(a name) and the size of the data contained </p>
<p>in the chunk:</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&lt;uint8 description[4]&gt; &lt;uint32 size&gt;</p>
<p><br></p>
<p><br/></p>
<p>The name is a four-byte string. &nbsp;It does not need to be null-terminated.</p>
<p>If the string is less than four bytes in length, the remaining unused bytes</p>
<p>must be null.</p>
<p><br></p>
<p><br/></p>
<p>-- Subsection Chunk Description Definitions</p>
<p><br></p>
<p><br/></p>
<p>Note that not all subsection chunk description definitions listed below</p>
<p>are guaranteed to be in the section chunk. &nbsp;It's just a list of what CAN</p>
<p>be in a section chunk. &nbsp;This especially applies to the "EXTRA" subsection.</p>
<p><br></p>
<p><br/></p>
<p>---- Section "CPU"</p>
<p><br></p>
<p><br/></p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;Name: &nbsp; &nbsp; &nbsp; &nbsp;Type: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Description:</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;PC &nbsp; &nbsp; &nbsp; &nbsp;uint16 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Program Counter</p>
@ -124,20 +124,20 @@
<p> &nbsp; &nbsp; &nbsp; &nbsp;Y &nbsp; &nbsp; &nbsp; &nbsp;uint8 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Y register</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;S &nbsp; &nbsp; &nbsp; &nbsp;uint8 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Stack pointer</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;RAM &nbsp; &nbsp; &nbsp; &nbsp;uint8[0x800] &nbsp; &nbsp; &nbsp; &nbsp;2KB work RAM</p>
<p><br></p>
<p><br/></p>
<p>---- Section "CPUC" (emulator specific)</p>
<p><br></p>
<p><br/></p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;Name: &nbsp; &nbsp; &nbsp; &nbsp;Type: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Description:</p>
<p><br></p>
<p><br/></p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;JAMM &nbsp; &nbsp; &nbsp; &nbsp;uint8 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Non-zero value if CPU in a "jammed" state</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;IRQL &nbsp; &nbsp; &nbsp; &nbsp;uint8 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Non-zero value if IRQs are to be generated constantly</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;ICoa &nbsp; &nbsp; &nbsp; &nbsp;int32 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Temporary cycle counter</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;ICou &nbsp; &nbsp; &nbsp; &nbsp;int32 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Cycle counter</p>
<p><br></p>
<p><br/></p>
<p>---- Section "PPU"</p>
<p><br></p>
<p><br/></p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;Name: &nbsp; &nbsp; &nbsp; &nbsp;Type: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Description:</p>
<p><br></p>
<p><br/></p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;NTAR &nbsp; &nbsp; &nbsp; &nbsp;uint8[0x800] &nbsp; &nbsp; &nbsp; &nbsp;2 KB of name/attribute table RAM</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;PRAM &nbsp; &nbsp; &nbsp; &nbsp;uint8[32] &nbsp; &nbsp; &nbsp; &nbsp;32 bytes of palette index RAM</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;SPRA &nbsp; &nbsp; &nbsp; &nbsp;uint8[0x100] &nbsp; &nbsp; &nbsp; &nbsp;256 bytes of sprite RAM</p>
@ -151,31 +151,31 @@
<p> &nbsp; &nbsp; &nbsp; &nbsp;TADD &nbsp; &nbsp; &nbsp; &nbsp;uint16 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;PPU Address Register</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;VBUF &nbsp; &nbsp; &nbsp; &nbsp;uint8 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;VRAM Read Buffer</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;PGEN &nbsp; &nbsp; &nbsp; &nbsp;uint8 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;PPU "general" latch. &nbsp;See Ki's document.</p>
<p><br></p>
<p><br/></p>
<p>---- Section "CTLR" (somewhat emulator specific)</p>
<p><br></p>
<p><br/></p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;Name: &nbsp; &nbsp; &nbsp; &nbsp;Type: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Description:</p>
<p><br></p>
<p><br/></p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;J1RB &nbsp; &nbsp; &nbsp; &nbsp;uint8 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Bit to be returned when first joystick is read.</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;J2RB &nbsp; &nbsp; &nbsp; &nbsp;uint8 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Bit to be returned when second joystick is read.</p>
<p><br></p>
<p><br/></p>
<p>---- Section "SND" (somewhat emulator specific)</p>
<p><br></p>
<p><br/></p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;NREG &nbsp; &nbsp; &nbsp; &nbsp;uint16 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Noise LFSR.</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;P17 &nbsp; &nbsp; &nbsp; &nbsp;uint8 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Last byte written to $4017.</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;PBIN &nbsp; &nbsp; &nbsp; &nbsp;uint8 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;DMC bit index.</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;PAIN &nbsp; &nbsp; &nbsp; &nbsp;uint32 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;DMC address index(from $8000).</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;PSIN &nbsp; &nbsp; &nbsp; &nbsp;uint32 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;DMC length counter(how many bytes left </p>
<p> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;to fetch).</p>
<p><br></p>
<p><br/></p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;&lt;to be finished&gt;</p>
<p><br></p>
<p><br/></p>
<p>---- Section "EXTRA" (varying emulator specificness)</p>
<p><br></p>
<p><br/></p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;For iNES-format games(incomplete, and doesn't apply to every game):</p>
<p><br></p>
<p><br/></p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;Name: &nbsp; &nbsp; &nbsp; &nbsp;Type: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Description:</p>
<p><br></p>
<p><br/></p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;WRAM &nbsp; &nbsp; &nbsp; &nbsp;uint8[0x2000] &nbsp; &nbsp; &nbsp; &nbsp;8KB of WRAM at $6000-$7fff</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;MEXR &nbsp; &nbsp; &nbsp; &nbsp;uint8[0x8000] &nbsp; &nbsp; &nbsp; &nbsp;(very emulator specific)</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;CHRR &nbsp; &nbsp; &nbsp; &nbsp;uint8[0x2000] &nbsp; &nbsp; &nbsp; &nbsp;8KB of CHR RAM at $0000-$1fff(in PPU address space).</p>
@ -192,23 +192,23 @@
<p> &nbsp; &nbsp; &nbsp; &nbsp;IRQA &nbsp; &nbsp; &nbsp; &nbsp;uint8 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Generic IRQ on/off register.</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;PBL &nbsp; &nbsp; &nbsp; &nbsp;uint8[4] &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;List of 4 8KB ROM banks paged in at $8000-$FFFF</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;CBL &nbsp; &nbsp; &nbsp; &nbsp;uint8[8] &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;List of 8 1KB VROM banks page in at $0000-$1FFF(PPU).</p>
<p><br></p>
<p><br/></p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;For FDS games(incomplete):</p>
<p><br></p>
<p><br/></p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;Name: &nbsp; &nbsp; &nbsp; &nbsp;Type: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Description:</p>
<p><br></p>
<p><br/></p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;DDT&lt;x&gt; &nbsp;uint8[65500] &nbsp; &nbsp;Disk data for side x(0-3).</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;FDSR &nbsp; &nbsp; &nbsp; &nbsp;uint8[0x8000] &nbsp; &nbsp; &nbsp; &nbsp;32 KB of work RAM</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;CHRR &nbsp; &nbsp; &nbsp; &nbsp;uint8[0x2000] &nbsp; &nbsp; &nbsp; &nbsp;8 KB of CHR RAM</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;IRQC &nbsp; &nbsp; &nbsp; &nbsp;uint32 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;IRQ counter</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;IQL1 &nbsp; &nbsp; &nbsp; &nbsp;uint32 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;IRQ latch</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;IRQA &nbsp; &nbsp; &nbsp; &nbsp;uint8 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;IRQ on/off.</p>
<p><br></p>
<p><br/></p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;WAVE &nbsp; &nbsp; &nbsp; &nbsp;uint8[64] &nbsp; &nbsp; &nbsp; &nbsp;Carrier waveform data.</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;MWAV &nbsp; &nbsp; &nbsp; &nbsp;uint8[32] &nbsp; &nbsp; &nbsp; &nbsp;Modulator waveform data.</p>
<p> &nbsp; &nbsp; &nbsp; &nbsp;AMPL &nbsp; &nbsp; &nbsp; &nbsp;uint8[2] &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Amplitude data.</p>
<p><br></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour">Easily create HTML Help documents</a></p>
<p><br/></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/help-authoring-tool">Create HTML Help, DOC, PDF and print manuals from 1 single source</a></p>
</div>
<div id="topic_footer">

View File

@ -3,7 +3,7 @@
<head>
<title>.fm2</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc">
<meta name="generator" content="HelpNDoc Personal Edition 3.6.0.345">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/base.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/hnd.css" />
@ -18,7 +18,7 @@
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript"><!--
<script type="text/javascript">
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
@ -53,214 +53,206 @@
<div id="topic_content">
<p><span class="rvts12">FCEUX Movie File format</span></p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p>FCEUX uses a new movie file format - .fm2.</p>
<p><br></p>
<p><br/></p>
<p>This differs from the previous FCE Ultra movie format (.fcm) in the following ways:</p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
It is text based by default; allowing easy movie editing/splicing</p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
An imbedded GUID so FCEUX can tell if a savestate belongs to a movie file</p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
Movies recorded from Start (Power-on) no longer have a redundant savestate</p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
Contains mouse input for recording the Zapper &amp; Arkanoid Paddle</p>
<p><br></p>
<p><br></p>
<ul style="text-indent: 0px; margin-left: 24px; list-style-position: outside;">
<li>It is text based by default; allowing easy movie editing/splicing</li>
<li>An imbedded GUID so FCEUX can tell if a savestate belongs to a 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 &amp; Arkanoid Paddle</li>
</ul>
<p><br/></p>
<p><br/></p>
<p><span class="rvts16">Format</span></p>
<p><br></p>
<p><br/></p>
<p>FM2 consists of two parts: Header and Input Log.</p>
<p>The header is always in ASCII plain text format. It consists of several key-value pairs.</p>
<p>The input log section can be identified by it starting with a | (pipe).</p>
<p>The input log section can be either in ASCII plain text format or in binary format.</p>
<p>The input log section terminates at EOF, unless the <span class="rvts38">length</span> key is specified in header.</p>
<p>Newlines may be \r\n or \n.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts16">Header</span></p>
<p><br></p>
<p><br/></p>
<p>Key-value pairs consist of a key identifier, followed by a space separator, followed by the value text.</p>
<p>Value text is always terminated by a newline, which the value text does not include.</p>
<p>The value text is parsed differently depending on the type of the key.</p>
<p>The key-value pairs may be in any order, except that the first key must be version.</p>
<p><br></p>
<p><br/></p>
<p>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:</p>
<p><br></p>
<p><br/></p>
<p> <span class="rvts38">- version</span> (required) - the version of the movie file format; for now it is always 3</p>
<p><span class="rvts64"><br></span></p>
<p><span class="rvts64"><br/></span></p>
<p> <span class="rvts38">- emuVersion</span> (required) - the version of the emulator used to produce the movie</p>
<p><span class="rvts64"><br></span></p>
<p><span class="rvts64"><br/></span></p>
<p> <span class="rvts38">- rerecordCount</span> (optional) - the rerecord count</p>
<p><span class="rvts64"><br></span></p>
<p><span class="rvts64"><br/></span></p>
<p> -<span class="rvts38"> palFlag</span> (bool) (optional) - true if the movie uses PAL timing</p>
<p><span class="rvts64"><br></span></p>
<p><span class="rvts64"><br/></span></p>
<p> -<span class="rvts38"> NewPPU</span> (bool) (optional) - true if the movie uses New PPU</p>
<p><span class="rvts64"><br></span></p>
<p><span class="rvts64"><br/></span></p>
<p> <span class="rvts38">- FDS</span> (bool) (optional) - true if movie was recorded on a Famicom Disk System (FDS) game</p>
<p><span class="rvts64"><br></span></p>
<p><span class="rvts64"><br/></span></p>
<p> <span class="rvts38">- fourscore</span> (bool) - true if a fourscore was used. If fourscore is not used, then port0 and port1 are required</p>
<p><span class="rvts64"><br></span></p>
<p><span class="rvts64"><br/></span></p>
<p> <span class="rvts38">- port0 </span>- indicates the type of input device attached to the port 0. Supported values are:</p>
<p> &nbsp; &nbsp; SI_NONE = 0</p>
<p> &nbsp; &nbsp; SI_GAMEPAD = 1</p>
<p> &nbsp; &nbsp; SI_ZAPPER = 2</p>
<p><span class="rvts64"><br></span></p>
<p><span class="rvts64"><br/></span></p>
<p> <span class="rvts38">- port1</span> - indicates the type of input device attached to the port 1. Supported values are:</p>
<p> &nbsp; &nbsp; SI_NONE = 0</p>
<p> &nbsp; &nbsp; SI_GAMEPAD = 1</p>
<p> &nbsp; &nbsp; SI_ZAPPER = 2</p>
<p><span class="rvts64"><br></span></p>
<p><span class="rvts64"><br/></span></p>
<p><span class="rvts38"> - port2</span> (required) - indicates the type of the FCExp port device which was attached. Supported values are:</p>
<p> &nbsp; &nbsp; SIFC_NONE = 0</p>
<p><span class="rvts64"><br></span></p>
<p><span class="rvts64"><br/></span></p>
<p> <span class="rvts38">- binary</span> (bool) (optional) - true if input log is stored in binary format</p>
<p><span class="rvts64"><br></span></p>
<p><span class="rvts64"><br/></span></p>
<p> <span class="rvts38">- length</span> (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 class="rvts62">fm3</span> format to allow storing extra data after the end of input log</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<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>
<p><br></p>
<p><br/></p>
<p><span class="rvts38"> - romFilename</span> (required) - the name of the file used to record the movie</p>
<p><span class="rvts64"><br></span></p>
<p><span class="rvts64"><br/></span></p>
<p><span class="rvts38"> - comment </span>(optional) - simply a memo</p>
<p style=" text-indent: -16px; padding-left: 16px; margin-left: 20px;"><span style="font-size: 10pt; font-family: 'Courier New'; color: #000000;">o</span>
by convention, the first token in the comment value is the subject of the comment</p>
<p style=" text-indent: -16px; padding-left: 16px; margin-left: 20px;"><span style="font-size: 10pt; font-family: 'Courier New'; color: #000000;">o</span>
by convention, subsequent comments with the same subject should have their ordering preserved and may be used to approximate multi-line comments</p>
<p style=" text-indent: -16px; padding-left: 16px; margin-left: 20px;"><span style="font-size: 10pt; font-family: 'Courier New'; color: #000000;">o</span>
by convention, the author of the movie should be stored in comment(s) with a subject of: <span class="rvts38">author</span></p>
<ul style="text-indent: 0px; margin-left: 36px; list-style-position: outside;">
<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 should have their ordering preserved and may be used to approximate multi-line comments</li>
<li>by convention, the author of the movie should be stored in comment(s) with a subject of: <span class="rvts38">author</span></li>
</ul>
<p>Example:</p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
comment author adelikat</p>
<p><span class="rvts64"><br></span></p>
<ul style="text-indent: 0px; margin-left: 24px; list-style-position: outside;">
<li>comment author adelikat</li>
</ul>
<p><span class="rvts64"><br/></span></p>
<p><span class="rvts38"> - subtitle </span>(optional) - a message that will be displayed on screen when movie is played back (unless Subtitles are turned off, see <a class="rvts18" href="MovieOptions.html">Movie options</a>)</p>
<p style=" text-indent: -16px; padding-left: 16px; margin-left: 20px;"><span style="font-size: 10pt; font-family: 'Courier New'; color: #000000;">o</span>
by convention, subtitles begin with the word "subtitle"</p>
<p style=" text-indent: -16px; padding-left: 16px; margin-left: 20px;"><span style="font-size: 10pt; font-family: 'Courier New'; color: #000000;">o</span>
by convention, an integer value following the word "subtitle" indicates the frame that the subtitle will be displayed</p>
<p style=" text-indent: -16px; padding-left: 16px; margin-left: 20px;"><span style="font-size: 10pt; font-family: 'Courier New'; color: #000000;">o</span>
by convention, any remaining text after the integer is considered to be the string displayed</p>
<ul style="text-indent: 0px; margin-left: 36px; list-style-position: outside;">
<li>by convention, subtitles begin with the word "subtitle"</li>
<li>by convention, an integer value following the word "subtitle" indicates the frame that the subtitle will be displayed</li>
<li>by convention, any remaining text after the integer is considered to be the string displayed</li>
</ul>
<p>Example:</p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
subtitle 1000 Level Two</p>
<ul style="text-indent: 0px; margin-left: 24px; list-style-position: outside;">
<li>subtitle 1000 Level Two</li>
</ul>
<p>At frame 1000 the words "Level Two" will be displayed on the screen</p>
<p><span class="rvts64"><br></span></p>
<p><span class="rvts64"><br/></span></p>
<p><span class="rvts38"> - guid </span>(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</p>
<p>GUID keys have a value which is in the standard guide format: 452DE2C3-EF43-2FA9-77AC-0677FC51543B</p>
<p><span class="rvts65"><br></span></p>
<p><span class="rvts65"><br/></span></p>
<p><span class="rvts38"> - romChecksum </span>(required) - the base64 of the hexified MD5 hash of the ROM which was used to record the movie</p>
<p><span class="rvts64"><br></span></p>
<p><span class="rvts64"><br/></span></p>
<p><span class="rvts38"> - savestate </span>(optional) - a <a class="rvts18" href="fcs.html">fcs</a> savestate blob, in case a movie was recorded from savestate &nbsp;</p>
<p>Hex string keys (used for binary blobs) have a value that is like 0x0123456789ABCDEF...</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts16">Input log</span></p>
<p><br></p>
<p><br/></p>
<p>The input log section consists of movie records either in the form of text lines or in the form of binary data.</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts63">Text format (default format):</span></p>
<p><br></p>
<p><br/></p>
<p>Every frame of the movie is represented by line of text beginning and ending with a | (pipe).</p>
<p>The fields in the line are as follows, except when fourscore is used.</p>
<p><span class="rvts66">|commands|port0|port1|port2|</span></p>
<p><br></p>
<p><br/></p>
<p>Field <span class="rvts38">commands</span> 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:</p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
1 = Soft Reset</p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
2 = Hard Reset (Power)</p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
4 = FDS Disk Insert</p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
8 = FDS Disk Select</p>
<p><br></p>
<ul style="text-indent: 0px; margin-left: 24px; list-style-position: outside;">
<li>1 = Soft Reset</li>
<li>2 = Hard Reset (Power)</li>
<li>4 = FDS Disk Insert</li>
<li>8 = FDS Disk Select</li>
</ul>
<p><br/></p>
<p>The format of port0, port1, port2 depends on which types of devices were attached.</p>
<p><br></p>
<p><br/></p>
<p>SI_GAMEPAD:</p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
the field consists of eight characters which constitute a bit field</p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
any character other than ' ' or '.' means that the button was pressed</p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
by convention, the following mnemonics are used in a column to remind us of which button corresponds to which column: <span class="rvts38">RLDUTSBA</span> (Right, Left, Down, Up, sTart, Select, B, A)</p>
<p><br></p>
<ul style="text-indent: 0px; margin-left: 24px; list-style-position: outside;">
<li>the field consists of eight characters which constitute a bit field</li>
<li>any character other than ' ' or '.' means that the button was pressed</li>
<li>by convention, the following mnemonics are used in a column to remind us of which button corresponds to which column: <span class="rvts38">RLDUTSBA</span> (Right, Left, Down, Up, sTart, Select, B, A)</li>
</ul>
<p><br/></p>
<p>SI_ZAPPER:</p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
<span class="rvts38">XXX YYY B Q Z</span></p>
<ul style="text-indent: 0px; margin-left: 24px; list-style-position: outside;">
<li><span class="rvts38">XXX YYY B Q Z</span></li>
</ul>
<p><span class="rvts38">XXX: </span>%03d, the x position of the mouse</p>
<p><span class="rvts38">YYY: </span>%03d, the y position of the mouse</p>
<p><span class="rvts38">B: </span>%1d, 1 if the mouse button is pressed; 0 if not</p>
<p><span class="rvts38">Q: </span>%1d, an internal value used by the emulator's zapper code</p>
<p><span class="rvts38">Z: </span>%d, a variable-length decimal integer; an internal value used by the emulator's zapper code</p>
<p><br></p>
<p><br/></p>
<p>SI_NONE:</p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
the field must be empty</p>
<p><br></p>
<ul style="text-indent: 0px; margin-left: 24px; list-style-position: outside;">
<li>the field must be empty</li>
</ul>
<p><br/></p>
<p>If a <span class="rvts38">fourscore</span> is used, then port0 and port1 are irrelevant and ignored.</p>
<p>The input types must all be gamepads, and each input log record must be in the following format:</p>
<p><span class="rvts66">|commands|RLDUTSBA|RLDUTSBA|RLDUTSBA|RLDUTSBA|port2|</span></p>
<p>{commands, player1, player2, player3, player4, port2}</p>
<p><br></p>
<p><br></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts63">Binary format:</span></p>
<p><br></p>
<p><br/></p>
<p>Input log section starts with a | (pipe).</p>
<p>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.</p>
<p><br></p>
<p><br/></p>
<p>The first byte of each record stores "commands" bit field.</p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
bit 0 = Soft Reset</p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
bit 1 = Hard Reset (Power)</p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
bit 2 = FDS Disk Insert</p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
bit 3 = FDS Disk Select</p>
<p><br></p>
<ul style="text-indent: 0px; margin-left: 24px; list-style-position: outside;">
<li>bit 0 = Soft Reset</li>
<li>bit 1 = Hard Reset (Power)</li>
<li>bit 2 = FDS Disk Insert</li>
<li>bit 3 = FDS Disk Select</li>
</ul>
<p><br/></p>
<p>The remaining bytes in the record depend on which types of devices are attached to port0 and port1.</p>
<p><br></p>
<p><br/></p>
<p>SI_GAMEPAD:</p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
1 byte added to the size of record</p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
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</p>
<p><br></p>
<ul style="text-indent: 0px; margin-left: 24px; list-style-position: outside;">
<li>1 byte added to the size of record</li>
<li>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</li>
</ul>
<p><br/></p>
<p>SI_ZAPPER:</p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
12 bytes added to the size of record</p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
1st byte - the x position of the mouse</p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
2nd byte - the y position of the mouse</p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
3rd byte - 1 if the mouse button is pressed; 0 if not</p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
4th byte - an internal value used by the emulator's zapper code</p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
bytes 5-12 (uint64) - an internal value used by the emulator's zapper code</p>
<p><br></p>
<ul style="text-indent: 0px; margin-left: 24px; list-style-position: outside;">
<li>12 bytes added to the size of record</li>
<li>1st byte - the x position of the mouse</li>
<li>2nd byte - the y position of the mouse</li>
<li>3rd byte - 1 if the mouse button is pressed; 0 if not</li>
<li>4th byte - an internal value used by the emulator's zapper code</li>
<li>bytes 5-12 (uint64) - an internal value used by the emulator's zapper code</li>
</ul>
<p><br/></p>
<p>SI_NONE:</p>
<p style=" text-indent: -24px; padding-left: 24px; margin-left: 0px;"><span style="font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', 'Arial'; color: #000000;"></span>
0 bytes added to the size of record</p>
<p><br></p>
<ul style="text-indent: 0px; margin-left: 24px; list-style-position: outside;">
<li>0 bytes added to the size of record</li>
</ul>
<p><br/></p>
<p>If a <span class="rvts38">fourscore</span> 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.</p>
<p><br></p>
<p><br></p>
<hr style="height: 1px; color : #000000; background-color : #000000; border-width : 0px;">
<p><br/></p>
<p><br/></p>
<hr style="height: 1px; color : #000000; background-color : #000000; border-width : 0px;"/>
<p><span class="rvts42">Notes:</span></p>
<p><span class="rvts42"><br></span></p>
<p><span class="rvts42"><br/></span></p>
<p>A. All movies start from power-on, unless a savestate key-value is present.</p>
<p><br></p>
<p><br/></p>
<p>B. The emulator uses these framerate constants</p>
<p> &nbsp;- NTSC: 1008307711 /256/65536 = 60.099822938442230224609375</p>
<p> &nbsp;- PAL : 838977920 &nbsp;/256/65536 = 50.00698089599609375</p>
<p><br></p>
<p><br></p>
<p><br></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com">Full featured Documentation generator</a></p>
<p><br/></p>
<p><br/></p>
<p><br/></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com/feature-tour/iphone-website-generation">Create iPhone web-based documentation</a></p>
</div>
<div id="topic_footer">

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff