updated docs

[[Split portion of a mixed commit.]]
This commit is contained in:
ansstuff 2013-09-05 15:15:17 +00:00
parent f56a7976a6
commit 5e701eee27
88 changed files with 1503 additions and 1268 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 Personal Edition 3.8.0.560">
<meta name="generator" content="HelpNDoc Personal Edition 3.9.1.648">
<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" />

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 Personal Edition 3.8.0.560">
<meta name="generator" content="HelpNDoc Personal Edition 3.9.1.648">
<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" />

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 Personal Edition 3.8.0.560">
<meta name="generator" content="HelpNDoc Personal Edition 3.9.1.648">
<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" />

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 Personal Edition 3.8.0.560">
<meta name="generator" content="HelpNDoc Personal Edition 3.9.1.648">
<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" />
@ -67,34 +67,40 @@
<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). You can combine this logging feature with other tools to make them much more powerful:</p>
<ul style="text-indent: 0px; margin-left: 24px; list-style-position: outside;">
<li>combine with Debugger to see which branches of the game code were executed and which weren't yet</li>
<li>combine with Trace Logger to let it log the code selectively</li>
<li>combine with Hex Editor to enable smart coloring of bytes (so you can visually see which bytes are used by the game and how/when they are used)</li>
<li>combine with Hex Editor to enable smart coloring of bytes (so you can observe which bytes are used by the game and how/when they are used)</li>
<li>combine with (an external) Tile Viewer to see which graphics was used during the play session, and which was not</li>
<li>combine with (an external) ROM Corruptor to make it only corrupt data, but not code</li>
<li>combine with (an external) Disassembler to help it separate code from data</li>
</ul>
<p><br/></p>
<p>See, it is very useful for finding specific code and data by using it with the <a class="rvts18" href="TraceLogger.html">Trace Logger</a>.</p>
<p>Furthermore, while it is running, the <a class="rvts18" href="HexEditor.html">Hex Editor</a> will color-code ROM bytes depending on whether they were logged as code or data. </p>
<p>It also makes debugging work more visual, since you can always see which lines of the disassembled code were executed and which weren't.</p>
<p><br/></p>
<p>Furthermore, while the Code/Data Logger is running, the <a class="rvts18" href="HexEditor.html">Hex Editor</a> will color-code ROM bytes depending on whether they were logged as code or data. </p>
<p><br/></p>
<p>For PRG ROM:</p>
<p><span class="rvts48">Dark-yellow</span> - the byte is code</p>
<p><span class="rvts49">Blue</span> - the byte is data</p>
<p><span class="rvts50">Cyan</span> - the byte is PCM audio data</p>
<p><span class="rvts47">Green</span> - the byte is both code and data</p>
<p><span class="rvts50">Dark-yellow</span> - the byte is code</p>
<p><span class="rvts51">Blue</span> - the byte is data</p>
<p><span class="rvts52">Cyan</span> - the byte is PCM audio data</p>
<p><span class="rvts49">Green</span> - the byte is both code and data</p>
<p><br/></p>
<p>For CHR ROM:</p>
<p><span class="rvts51">Yellow</span> - the byte was rendered</p>
<p><span class="rvts52">Light-blue</span> - the byte was read programmatically</p>
<p><span class="rvts53">Light-green</span> - the byte was both rendered and read programmatically</p>
<p><span class="rvts53">Yellow</span> - the byte was rendered</p>
<p><span class="rvts54">Light-blue</span> - the byte was read programmatically</p>
<p><span class="rvts55">Light-green</span> - the byte was both rendered and read programmatically</p>
<p><br/></p>
<p>The Code/Data Logger can also be used to generate a stripped NES ROM. A "stripped" NES ROM is one in which everything that was not logged by the Code/Data Logger is removed. It can be useful in many ways, for example, you can view the ROM in an external Hex Editor or a Tile Viewer, 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. Example of such usage:</p>
<p>1. Open the Code/Data Logger, and press Start to begin logging. If you want to also log accesses to graphics, enable New PPU before starting.</p>
<p>The Code/Data Logger can also be used to generate a stripped NES ROM.</p>
<p>"Stripped" NES ROM is a ROM in which everything that was not logged by the Code/Data Logger is removed. It can be useful in many ways, for example, you can view the ROM in an external Hex Editor or a Tile Viewer, 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><span class="rvts32">Example of such usage:</span></p>
<p>1. Open the Code/Data Logger, and press Start to begin logging.</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>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>4. Play through whatever levels you want present in the demo ROM. 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, and then someone plays the stripped ROM and attempts to perform that move, the game may very well crash or glitch up, because there are zeros in the stripped ROM instead of the code responsible for handling the special move.</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 again while logging.</p>
<p>4. Play through whatever levels you want present in the demo ROM. 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, and then someone plays the stripped ROM and attempts to perform that move, the game may very well crash or glitch up, because there are zeros in the stripped ROM instead of the code responsible for handling this special move.</p>
<p>5. Save the stripped NES ROM.</p>
<p>6. Alternatively, you can save Unused Data (a ROM which complements the Stripped ROM). For example, you can play throught the game with the New PPU enabled, then save Unused Data and watch it in a Tile Viewer to find unused graphics (possibly stumble upon secrets and easter eggs).</p>
<p><br/></p>
<p>Alternatively, you can save Unused Data (a ROM which is the opposite to the Stripped ROM). For example, you can play through the game, then save Unused Data ROM and watch it in a Tile Viewer to find unused graphics (possibly stumble upon secrets and easter eggs).</p>
<p><br/></p>
<p>Some notes:</p>
<p>When you "Load" another .cdl file, it does not clear the current log; instead, it combines it with the information in the file. This can be useful if you're trying to obtain a complete log of certain game, as multiple people can play through the game and keep code/data logs, and then the results can be combined. But if you would like to actually clear the code/data log, press the "Reset Log" button.</p>
@ -169,9 +175,9 @@
<p><br/></p>
<hr style="height: 1px; color : #000000; background-color : #000000; border-width : 0px;"/>
<p><br/></p>
<p>CDL files make possible a number of things never done before. 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. Also, it is possible for someone to make a more intelligent ROM corruptor that only corrupts data (by checking the 'D' bit). In any case, the Code/Data Logger opens many new possibilities for discovering useful things in games. 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. 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>CDL files make possible a number of things never done before. 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. Also, it is possible for someone to make a more intelligent ROM corruptor that only corrupts data (by checking the 'D' bit). In any case, the Code/Data Logger opens many new possibilities for discovering useful things in games. Another interesting possibility 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. 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>The Code/Data Logger becomes the most useful when you need to restore a full source code of a game using IDA (Interactive DisAssembler). There you can write a custom IDC script that uses a CDL file and calls MakeCode()/MakeData() functions to help the disassembler distinguish code from data. Making full and working/recompilable disassembly becomes really easy this way.</p>
<p>The Code/Data Logger becomes the most useful when you need to restore a full source code of a game using e.g. IDA or another disassembler. There you can write a custom IDC script that uses a CDL file and calls MakeCode()/MakeData() functions to help the disassembler distinguish code from data. Making full and working/recompileable disassembly becomes really easy this way.</p>
<p><br/></p>
<p><br/></p>
<p><br/></p>

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 Personal Edition 3.8.0.560">
<meta name="generator" content="HelpNDoc Personal Edition 3.9.1.648">
<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" />

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 Personal Edition 3.8.0.560">
<meta name="generator" content="HelpNDoc Personal Edition 3.9.1.648">
<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" />

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 Personal Edition 3.8.0.560">
<meta name="generator" content="HelpNDoc Personal Edition 3.9.1.648">
<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" />

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 Personal Edition 3.8.0.560">
<meta name="generator" content="HelpNDoc Personal Edition 3.9.1.648">
<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" />

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 Personal Edition 3.8.0.560">
<meta name="generator" content="HelpNDoc Personal Edition 3.9.1.648">
<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" />

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 Personal Edition 3.8.0.560">
<meta name="generator" content="HelpNDoc Personal Edition 3.9.1.648">
<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" />

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 Personal Edition 3.8.0.560">
<meta name="generator" content="HelpNDoc Personal Edition 3.9.1.648">
<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" />

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 Personal Edition 3.8.0.560">
<meta name="generator" content="HelpNDoc Personal Edition 3.9.1.648">
<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" />
@ -158,7 +158,8 @@
<p><br/></p>
<p>Hovering the mouse over the disassembly will display at the bottom of the window more detailed information about the location of this code in the iNES file.</p>
<p><br/></p>
<p>There is an empty column to the left of the memory view. Left clicking on this column will open the Inline Assembler, which allows you to patch the ROM at runtime. Right clicking on this column will open the Hex Editor, which allows you to directly edit the ROM. Middle-clicking on this column 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>There is narrow column to the left of the Disassembly window. Left clicking on this column will open the Inline Assembler, which allows you to patch the ROM at runtime. Right clicking on this column will open the Hex Editor, which allows you to directly edit the ROM. Middle-clicking on this column 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>Also, when <a class="rvts18" href="CodeDataLogger.html">Code/Data Logger</a> is running, this small column displays whether the respective line of the disassembled memory was executed ("c") or it was read as Data ("d"), or it wasn't logged yet. This way you can easily distinguish which branches of the game code were executed and which weren't.</p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts44">Breakpoints</span></p>

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 Personal Edition 3.8.0.560">
<meta name="generator" content="HelpNDoc Personal Edition 3.9.1.648">
<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" />

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 Personal Edition 3.8.0.560">
<meta name="generator" content="HelpNDoc Personal Edition 3.9.1.648">
<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" />

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 Personal Edition 3.8.0.560">
<meta name="generator" content="HelpNDoc Personal Edition 3.9.1.648">
<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" />
@ -56,22 +56,22 @@
<p><br/></p>
<p>Information regarding various concepts such as TAS, ROM Hacking, RAM Mapping.</p>
<p><br/></p>
<p><a class="rvts71" href="ToolAssistedSpeedruns.html">Troubleshooting FAQ</a></p>
<p><a class="rvts74" href="ToolAssistedSpeedruns.html">Troubleshooting FAQ</a></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><a class="rvts71" href="ToolAssistedSpeedruns.html">Tool Assisted Speedruns (TAS)</a></p>
<p><a class="rvts74" href="ToolAssistedSpeedruns.html">Tool Assisted Speedruns (TAS)</a></p>
<p><br/></p>
<p>Information regarding Tool Assisted Speedruns and the TAS community.</p>
<p><br/></p>
<p><br/></p>
<p><a class="rvts71" href="ROMHacking.html">ROM Hacking</a></p>
<p><a class="rvts74" href="ROMHacking.html">ROM Hacking</a></p>
<p><br/></p>
<p>Information regarding making ROM Hacks and the ROM Hacking community.</p>
<p><br/></p>
<p><br/></p>
<p><a class="rvts71" href="NESRAMMappingFindingValues.html">NES RAM Mapping</a></p>
<p><a class="rvts74" href="NESRAMMappingFindingValues.html">NES RAM Mapping</a></p>
<p><br/></p>
<p>A guide to the layout of NES RAM, and how to interpret its contents.</p>
<p><br/></p>

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 Personal Edition 3.8.0.560">
<meta name="generator" content="HelpNDoc Personal Edition 3.9.1.648">
<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" />
@ -48,7 +48,7 @@
<a href="Overview.html"><img src="img/arrow_left.png" alt="Previous"/></a>
<a href="WhatsNew221.html"><img src="img/arrow_right.png" alt="Next"/></a>
<a href="WhatsNew222.html"><img src="img/arrow_right.png" alt="Next"/></a>
</div>
<div class="clear"></div>

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 Personal Edition 3.8.0.560">
<meta name="generator" content="HelpNDoc Personal Edition 3.9.1.648">
<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" />

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 Personal Edition 3.8.0.560">
<meta name="generator" content="HelpNDoc Personal Edition 3.9.1.648">
<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" />

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 Personal Edition 3.8.0.560">
<meta name="generator" content="HelpNDoc Personal Edition 3.9.1.648">
<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" />

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 Personal Edition 3.8.0.560">
<meta name="generator" content="HelpNDoc Personal Edition 3.9.1.648">
<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" />

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 Personal Edition 3.8.0.560">
<meta name="generator" content="HelpNDoc Personal Edition 3.9.1.648">
<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" />

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 Personal Edition 3.8.0.560">
<meta name="generator" content="HelpNDoc Personal Edition 3.9.1.648">
<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" />

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 Personal Edition 3.8.0.560">
<meta name="generator" content="HelpNDoc Personal Edition 3.9.1.648">
<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" />
@ -59,35 +59,57 @@
<p><span class="rvts17">Hex Editor</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>The Hex Editor is a very powerful memory viewing/editing tool, it obsoletes the Memory Viewer tool from the FCE Ultra and FCEU Rerecording branches.</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>It can do a wide range of things. &nbsp;It allows you to view the entire RAM &amp; ROM contents in a resizable dialog window. 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 (Ctrl+F), 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>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><span class="rvts16">Using the Hex Editor</span></p>
<p><br/></p>
<p>The Hex Editor lets you edit three major areas:</p>
<p><br/></p>
<p><span class="rvts32">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>This allows you to directly edit all of the NES address space (System Bus - $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. 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 <a class="rvts18" href="CheatSearch.html">Cheat Console</a>. Finally, the right-click menu can be used to quickly add a read or write breakpoint to the debugger. When adding a breakpoint to the range of ROM addresses ($8000-$FFFF), the Hex Editor also takes into account the number of the bank in which the byte is located.</p>
<p><br/></p>
<p><span class="rvts32">2. PPU MEMORY</span></p>
<p>This allows you to directly view and write to PPU memory (VRAM).</p>
<p><br/></p>
<p><span class="rvts32">3. THE ROM FILE</span></p>
<p>This 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 <a class="rvts18" href="CodeDataLogger.html">Code/Data Logger</a> running, then bytes that were logged will be colored.</p>
<p>This 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).</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>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. 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+C (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>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>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><span class="rvts16">Highlighting</span></p>
<p><br/></p>
<p>The Hex Editor highlights certain bytes with different colors to help you distinguish different data.</p>
<p>Usually all bytes are colored black.</p>
<p>Bookmarked RAM addresses are highlighted by <span class="rvts47">green color</span>.</p>
<p>Freezed RAM addresses are highlighted by <span class="rvts46">blue color</span>.</p>
<p>Modified ROM bytes are highlighted by <span class="rvts48">red color</span>.</p>
<p>If you have the <a class="rvts18" href="CodeDataLogger.html">Code/Data Logger</a> running, bytes that were logged will be colored:</p>
<p>For PRG ROM segment:</p>
<p><span class="rvts50">Dark-yellow</span> - the byte is code</p>
<p><span class="rvts51">Blue</span> - the byte is data</p>
<p><span class="rvts52">Cyan</span> - the byte is PCM audio data</p>
<p><span class="rvts49">Green</span> - the byte is both code and data</p>
<p>For CHR ROM segment:</p>
<p><span class="rvts53">Yellow</span> - the byte was rendered</p>
<p><span class="rvts54">Light-blue</span> - the byte was read programmatically</p>
<p><span class="rvts55">Light-green</span> - the byte was both rendered and read programmatically</p>
<p><br/></p>
<p><span class="rvts16">Highlight Activity</span></p>
<p><br/></p>
<p>This feature of the Hex Editor can draw your attention to bytes that changed their value since the last frame, or since the last update of Hex Editor window (if "Fade when paused" option is enabled).</p>
<p>If you don't need this feature, you can switch it off in the "Highlighting" submenu.</p>
<p>You can customize this feature by changing "fading period".</p>
<p>IMPORTANT NOTE: this feature does not track the actual changes of RAM. It works by simply comparing current values to previously displayed values of the same addresses. That's why the feature works with RAM/PPU/ROM as well.</p>
<p><br/></p>
<p><br/></p>
<p><br/></p>

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 Personal Edition 3.8.0.560">
<meta name="generator" content="HelpNDoc Personal Edition 3.9.1.648">
<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" />

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 Personal Edition 3.8.0.560">
<meta name="generator" content="HelpNDoc Personal Edition 3.9.1.648">
<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" />

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 Personal Edition 3.8.0.560">
<meta name="generator" content="HelpNDoc Personal Edition 3.9.1.648">
<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" />

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 Personal Edition 3.8.0.560">
<meta name="generator" content="HelpNDoc Personal Edition 3.9.1.648">
<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" />

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 Personal Edition 3.8.0.560">
<meta name="generator" content="HelpNDoc Personal Edition 3.9.1.648">
<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" />
@ -61,17 +61,17 @@
<p>The following functions are available in FCEUX, in addition to standard LUA capabilities:</p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts57">Emu library</span></p>
<p><span class="rvts60">Emu library</span></p>
<p><br/></p>
<p><span class="rvts65">emu.poweron()</span></p>
<p><span class="rvts64"><br/></span></p>
<p><span class="rvts64">Executes a power cycle.</span></p>
<p><span class="rvts64"><br/></span></p>
<p><span class="rvts65">emu.softreset()</span></p>
<p><span class="rvts64"><br/></span></p>
<p><span class="rvts64">Executes a (soft) reset.</span></p>
<p><span class="rvts68">emu.poweron()</span></p>
<p><span class="rvts67"><br/></span></p>
<p><span class="rvts67">Executes a power cycle.</span></p>
<p><span class="rvts67"><br/></span></p>
<p><span class="rvts68">emu.softreset()</span></p>
<p><span class="rvts67"><br/></span></p>
<p><span class="rvts67">Executes a (soft) reset.</span></p>
<p><br/></p>
<p><span class="rvts58">emu.speedmode(string mode)</span></p>
<p><span class="rvts61">emu.speedmode(string mode)</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>
@ -79,70 +79,70 @@
<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="rvts58">emu.frameadvance()</span></p>
<p><span class="rvts61">emu.frameadvance()</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">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="rvts58">emu.pause()</span></p>
<p><span class="rvts61">emu.pause()</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="rvts58">emu.unpause()</span></p>
<p><span class="rvts61">emu.unpause()</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="rvts58">emu.exec_count(int count, function func)</span></p>
<p><span class="rvts61">emu.exec_count(int count, function func)</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="rvts59">emu.exec_time(int time</span><span class="rvts58">, function func</span><span class="rvts59">)</span></p>
<p><span class="rvts62">emu.exec_time(int time</span><span class="rvts61">, function func</span><span class="rvts62">)</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="rvts58">emu.setrenderplanes(bool sprites, bool background)</span></p>
<p><span class="rvts61">emu.setrenderplanes(bool sprites, bool background)</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="rvts59">emu.message(string message)</span></p>
<p><span class="rvts62">emu.message(string message)</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="rvts58">int emu.framecount()</span></p>
<p><span class="rvts61">int emu.framecount()</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="rvts58">int emu.lagcount()</span></p>
<p><span class="rvts61">int emu.lagcount()</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="rvts58">bool emu.lagged()</span></p>
<p><span class="rvts61">bool emu.lagged()</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="rvts58">emu.setlagflag(bool value)</span></p>
<p><span class="rvts61">emu.setlagflag(bool value)</span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Sets current value of lag flag.</span></p>
<p><span class="rvts37">Some games poll input even in lag frames, so standard way of detecting lag (used by FCEUX and other emulators) does not work for those games, and you have to determine lag frames manually.</span></p>
<p><span class="rvts37">First, find RAM addresses that help you distinguish between lag and non-lag frames (e.g. an in-game frame counter that only increments in non-lag frames). Then register memory hooks that will change lag flag when needed.</span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts58">bool emu.emulating()</span></p>
<p><span class="rvts61">bool emu.emulating()</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="rvts58">bool emu.paused()</span></p>
<p><span class="rvts61">bool emu.paused()</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="rvts58">bool emu.readonly()</span></p>
<p><span class="rvts61">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">Returns whether the emulator is in read-only state. &nbsp;</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="rvts58">emu.setreadonly(bool state)</span></p>
<p><span class="rvts61">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">Sets the read-only status to read-only if argument is true and read+write if false.</span></p>
@ -150,7 +150,7 @@
<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="rvts58">emu.registerbefore(function func)</span></p>
<p><span class="rvts61">emu.registerbefore(function func)</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>
@ -158,11 +158,11 @@
<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="rvts58">emu.registerafter(function func)</span></p>
<p><span class="rvts61">emu.registerafter(function func)</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="rvts58">emu.registerexit(function func)</span></p>
<p><span class="rvts61">emu.registerexit(function func)</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>
@ -170,15 +170,15 @@
<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="rvts58">bool emu.addgamegenie(string str)</span></p>
<p><span class="rvts61">bool emu.addgamegenie(string str)</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">Usage: emu.addgamegenie("NUTANT")</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="rvts58"><br/></span></p>
<p><span class="rvts58">bool emu.delgamegenie(string str)</span></p>
<p><span class="rvts61"><br/></span></p>
<p><span class="rvts61">bool emu.delgamegenie(string str)</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>
@ -186,11 +186,11 @@
<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="rvts58">emu.print(string str)</span></p>
<p><span class="rvts61">emu.print(string str)</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="rvts58">emu.getscreenpixel(int x, int y, bool getemuscreen)</span></p>
<p><span class="rvts61">emu.getscreenpixel(int x, int y, bool getemuscreen)</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>
@ -201,54 +201,54 @@
<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="rvts57">FCEU library</span></p>
<p><span class="rvts60">FCEU library</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="rvts67">ROM Library</span></p>
<p><span class="rvts70">ROM Library</span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts58">rom.readbyte(int address)</span></p>
<p><span class="rvts58">rom.readbyteunsigned(int address)</span></p>
<p><span class="rvts61">rom.readbyte(int address)</span></p>
<p><span class="rvts61">rom.readbyteunsigned(int address)</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">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="rvts58">rom.readbytesigned(int address)</span></p>
<p><span class="rvts61">rom.readbytesigned(int address)</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">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="rvts67">Memory Library</span></p>
<p><span class="rvts70">Memory Library</span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts58">memory.readbyte(int address)</span></p>
<p><span class="rvts58">memory.readbyteunsigned(int address)</span></p>
<p><span class="rvts61">memory.readbyte(int address)</span></p>
<p><span class="rvts61">memory.readbyteunsigned(int address)</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="rvts58">memory.readbyterange(int address, int length)</span></p>
<p><span class="rvts61">memory.readbyterange(int address, int length)</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="rvts58">memory.readbytesigned(int address)</span></p>
<p><span class="rvts61">memory.readbytesigned(int address)</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="rvts58">memory.writebyte(int address, int value)</span></p>
<p><span class="rvts61">memory.writebyte(int address, int value)</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="rvts58">int memory.getregister(cpuregistername)</span></p>
<p><span class="rvts61">int memory.getregister(cpuregistername)</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">Valid registers are: "a", "x", "y", "s", "p", and "pc".</span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts58">memory.setregister(string cpuregistername, int value)</span></p>
<p><span class="rvts61">memory.setregister(string cpuregistername, int value)</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>
@ -258,8 +258,8 @@
<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><a name="LuaBreakpoints"></a>
<span class="rvts37"><br/></span></p>
<p><span class="rvts58">memory.register(int address, [int size,] function func)</span></p>
<p><span class="rvts58">memory.registerwrite(int address, [int size,] function func)</span></p>
<p><span class="rvts61">memory.register(int address, [int size,] function func)</span></p>
<p><span class="rvts61">memory.registerwrite(int address, [int size,] function func)</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>
@ -273,9 +273,9 @@
<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="rvts58">memory.registerexec(int address, [int size,] function func)</span></p>
<p><span class="rvts58">memory.registerrun(int address, [int size,] function func)</span></p>
<p><span class="rvts58">memory.registerexecute(int address, [int size,] function func)</span></p>
<p><span class="rvts61">memory.registerexec(int address, [int size,] function func)</span></p>
<p><span class="rvts61">memory.registerrun(int address, [int size,] function func)</span></p>
<p><span class="rvts61">memory.registerexecute(int address, [int size,] function func)</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>
@ -285,7 +285,7 @@
<p><span class="rvts37"><br/></span></p>
<div><table width="100%" border="1" cellpadding="1" cellspacing="2" style="border-color: #000000; border-style: solid;">
<tr valign="top">
<td style="border-color: #000000; border-style: solid;"><p><span class="rvts69">Example of custom breakpoint:</span></p>
<td style="border-color: #000000; border-style: solid;"><p><span class="rvts72">Example of custom breakpoint:</span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">function CounterBreak()</span></p>
<p class="rvps5"><span class="rvts37">ObjCtr = memory.getregister("y")</span></p>
@ -301,33 +301,33 @@
</div>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts67">Debugger Library</span></p>
<p><span class="rvts70">Debugger Library</span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts58">debugger.hitbreakpoint()</span></p>
<p><span class="rvts58"><br/></span></p>
<p><span class="rvts61">debugger.hitbreakpoint()</span></p>
<p><span class="rvts61"><br/></span></p>
<p><span class="rvts37">Simulates a breakpoint hit, pauses emulation and brings up the Debugger window. Use this function in your handlers of custom breakpoints.</span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts58">int debugger.getcyclescount()</span></p>
<p><span class="rvts61">int debugger.getcyclescount()</span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Returns an integer value representing the number of CPU cycles elapsed since the poweron or since the last reset of the cycles counter.</span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts58">int debugger.getinstructionscount()</span></p>
<p><span class="rvts58"><br/></span></p>
<p><span class="rvts61">int debugger.getinstructionscount()</span></p>
<p><span class="rvts61"><br/></span></p>
<p><span class="rvts37">Returns an integer value representing the number of CPU instructions executed since the poweron or since the last reset of the instructions counter.</span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts58">debugger.resetcyclescount()</span></p>
<p><span class="rvts58"><br/></span></p>
<p><span class="rvts61">debugger.resetcyclescount()</span></p>
<p><span class="rvts61"><br/></span></p>
<p><span class="rvts37">Resets the cycles counter.</span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts58">debugger.resetinstructionscount()</span></p>
<p><span class="rvts58"><br/></span></p>
<p><span class="rvts61">debugger.resetinstructionscount()</span></p>
<p><span class="rvts61"><br/></span></p>
<p><span class="rvts37">Resets the instructions counter.</span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts67">Joypad Library</span></p>
<p><span class="rvts70">Joypad Library</span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts58">table joypad.get(int player)</span></p>
<p><span class="rvts59">table joypad.read(</span><span class="rvts58">int player</span><span class="rvts59">)</span></p>
<p><span class="rvts61">table joypad.get(int player)</span></p>
<p><span class="rvts62">table joypad.read(</span><span class="rvts61">int player</span><span class="rvts62">)</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>
@ -337,25 +337,25 @@
<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="rvts58">table joypad.getimmediate(int player)</span></p>
<p><span class="rvts59">table joypad.readimmediate(</span><span class="rvts58">int player</span><span class="rvts59">)</span></p>
<p><span class="rvts61">table joypad.getimmediate(int player)</span></p>
<p><span class="rvts62">table joypad.readimmediate(</span><span class="rvts61">int player</span><span class="rvts62">)</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">As of FCEUX 2.2.0, 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="rvts58">table joypad.getdown(int player)</span></p>
<p><span class="rvts58">table joypad.readdown(int player)</span></p>
<p><span class="rvts61">table joypad.getdown(int player)</span></p>
<p><span class="rvts61">table joypad.readdown(int player)</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="rvts58">table joypad.getup(int player)</span></p>
<p><span class="rvts58">table joypad.readup(int player)</span></p>
<p><span class="rvts61">table joypad.getup(int player)</span></p>
<p><span class="rvts61">table joypad.readup(int player)</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="rvts58">joypad.set(int player, table input)</span></p>
<p><span class="rvts59">joypad.write(</span><span class="rvts58">int player, table input</span><span class="rvts59">)</span></p>
<p><span class="rvts61">joypad.set(int player, table input)</span></p>
<p><span class="rvts62">joypad.write(</span><span class="rvts61">int player, table input</span><span class="rvts62">)</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>
@ -374,9 +374,9 @@
<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="rvts67">Zapper Library</span></p>
<p><span class="rvts70">Zapper Library</span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts59">table zapper.read()</span></p>
<p><span class="rvts62">table zapper.read()</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>
@ -389,60 +389,60 @@
<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="rvts67">Input Library</span></p>
<p><span class="rvts70">Input Library</span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts58">table input.get()</span></p>
<p><span class="rvts58">table input.read()</span></p>
<p><span class="rvts61">table input.get()</span></p>
<p><span class="rvts61">table input.read()</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="rvts58">string input.popup</span></p>
<p><span class="rvts61">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">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="rvts67">Savestate Library</span></p>
<p><span class="rvts70">Savestate Library</span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts59">object savestate.object(int slot = nil)</span></p>
<p><span class="rvts62">object savestate.object(int slot = nil)</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">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="rvts59">object savestate.create(int slot = nil)</span></p>
<p><span class="rvts62">object savestate.create(int slot = nil)</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="rvts59">savestate.save(object savestate)</span></p>
<p><span class="rvts62">savestate.save(object savestate)</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="rvts59">savestate.load(object savestate)</span></p>
<p><span class="rvts62">savestate.load(object savestate)</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">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="rvts58">savestate.persist(object savestate)</span></p>
<p><span class="rvts61">savestate.persist(object savestate)</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="rvts58">savestate.registersave(function func)</span></p>
<p><span class="rvts61">savestate.registersave(function func)</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">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="rvts58">savestate.registerload(function func)</span></p>
<p><span class="rvts61">savestate.registerload(function func)</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">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="rvts58">savestate.loadscriptdata(int location)</span></p>
<p><span class="rvts61">savestate.loadscriptdata(int location)</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>
@ -450,17 +450,17 @@
<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="rvts67">Movie Library</span></p>
<p><span class="rvts70">Movie Library</span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts58">bool movie.active()</span></p>
<p><span class="rvts61">bool movie.active()</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="rvts58">int movie.framecount()</span></p>
<p><span class="rvts61">int movie.framecount()</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="rvts58">string movie.mode()</span></p>
<p><span class="rvts61">string movie.mode()</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>
@ -470,41 +470,41 @@
<p><span class="rvts37">- "taseditor"</span></p>
<p><span class="rvts37">- nil</span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts58">movie.rerecordcounting(bool counting)</span></p>
<p><span class="rvts61">movie.rerecordcounting(bool counting)</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="rvts58">movie.stop()</span></p>
<p><span class="rvts58">movie.close()</span></p>
<p><span class="rvts61">movie.stop()</span></p>
<p><span class="rvts61">movie.close()</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="rvts58">int movie.length()</span></p>
<p><span class="rvts61">int movie.length()</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="rvts58">string movie.name()</span></p>
<p><span class="rvts58">string movie.getname()</span></p>
<p><span class="rvts61">string movie.name()</span></p>
<p><span class="rvts61">string movie.getname()</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="rvts58">movie.getfilename()</span></p>
<p><span class="rvts61">movie.getfilename()</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="rvts58">movie.rerecordcount()</span></p>
<p><span class="rvts61">movie.rerecordcount()</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="rvts58">movie.replay()</span></p>
<p><span class="rvts58">movie.playbeginning()</span></p>
<p><span class="rvts61">movie.replay()</span></p>
<p><span class="rvts61">movie.playbeginning()</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">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="rvts58">bool movie.readonly()</span></p>
<p><span class="rvts58">bool movie.getreadonly()</span></p>
<p><span class="rvts61">bool movie.readonly()</span></p>
<p><span class="rvts61">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">FCEUX keeps the read-only status even without a movie loaded.</span></p>
@ -513,7 +513,7 @@
<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="rvts58">movie.setreadonly(bool state)</span></p>
<p><span class="rvts61">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">FCEUX keeps the read-only status even without a movie loaded.</span></p>
@ -523,45 +523,45 @@
<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="rvts58">bool movie.recording()</span></p>
<p><span class="rvts61">bool movie.recording()</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="rvts58">bool movie.playing()</span></p>
<p><span class="rvts61">bool movie.playing()</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="rvts58">bool movie.ispoweron()</span></p>
<p><span class="rvts61">bool movie.ispoweron()</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="rvts58">bool movie.isfromsavestate()</span></p>
<p><span class="rvts61">bool movie.isfromsavestate()</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="rvts58">string movie.name()</span></p>
<p><span class="rvts61">string movie.name()</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="rvts58">bool movie.readonly()</span></p>
<p><span class="rvts61">bool movie.readonly()</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="rvts67">GUI Library</span></p>
<p><span class="rvts70">GUI Library</span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts58">gui.pixel(int x, int y, type color)</span></p>
<p><span class="rvts58">gui.drawpixel(int x, int y, type color)</span></p>
<p><span class="rvts58">gui.setpixel(int x, int y, type color)</span></p>
<p><span class="rvts58">gui.writepixel(int x, int y, type color)</span></p>
<p><span class="rvts61">gui.pixel(int x, int y, type color)</span></p>
<p><span class="rvts61">gui.drawpixel(int x, int y, type color)</span></p>
<p><span class="rvts61">gui.setpixel(int x, int y, type color)</span></p>
<p><span class="rvts61">gui.writepixel(int x, int y, type color)</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="rvts58">gui.getpixel(int x, int y)</span></p>
<p><span class="rvts61">gui.getpixel(int x, int y)</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>
@ -569,47 +569,47 @@
<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="rvts58">gui.line(int x1, int y1, int x2, int y2 [, color [, skipfirst]])</span></p>
<p><span class="rvts58">gui.drawline(int x1, int y1, int x2, int y2 [, color [, skipfirst]])</span></p>
<p><span class="rvts61">gui.line(int x1, int y1, int x2, int y2 [, color [, skipfirst]])</span></p>
<p><span class="rvts61">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">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="rvts58">gui.box(int x1, int y1, int x2, int y2 [, fillcolor [, outlinecolor]]))</span></p>
<p><span class="rvts58">gui.drawbox(int x1, int y1, int x2, int y2 [, fillcolor [, outlinecolor]]))</span></p>
<p><span class="rvts58">gui.rect(int x1, int y1, int x2, int y2 [, fillcolor [, outlinecolor]]))</span></p>
<p><span class="rvts58">gui.drawrect(int x1, int y1, int x2, int y2 [, fillcolor [, outlinecolor]]))</span></p>
<p><span class="rvts61">gui.box(int x1, int y1, int x2, int y2 [, fillcolor [, outlinecolor]]))</span></p>
<p><span class="rvts61">gui.drawbox(int x1, int y1, int x2, int y2 [, fillcolor [, outlinecolor]]))</span></p>
<p><span class="rvts61">gui.rect(int x1, int y1, int x2, int y2 [, fillcolor [, outlinecolor]]))</span></p>
<p><span class="rvts61">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">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">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="rvts58">gui.text(int x, int y, string str [, textcolor [, backcolor]])</span></p>
<p><span class="rvts58">gui.drawtext(int x, int y, string str [, textcolor [, backcolor]])</span></p>
<p><span class="rvts61">gui.text(int x, int y, string str [, textcolor [, backcolor]])</span></p>
<p><span class="rvts61">gui.drawtext(int x, int y, string str [, textcolor [, backcolor]])</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="rvts58">gui.parsecolor(color)</span></p>
<p><span class="rvts61">gui.parsecolor(color)</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="rvts58">gui.savescreenshot()</span></p>
<p><span class="rvts61">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="rvts58">gui.savescreenshotas(string name)</span></p>
<p><span class="rvts61">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="rvts58">string gui.gdscreenshot()</span></p>
<p><span class="rvts61">string gui.gdscreenshot()</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">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="rvts63">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="rvts66">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="rvts58">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="rvts58">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="rvts58">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="rvts61">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="rvts61">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="rvts61">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">Draws an image on the screen. gdimage must be in truecolor gd string format.</span></p>
<p><span class="rvts37"><br/></span></p>
@ -623,20 +623,20 @@
<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="rvts58">gui.opacity(int alpha)</span></p>
<p><span class="rvts61">gui.opacity(int alpha)</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="rvts58">gui.transparency(int trans)</span></p>
<p><span class="rvts61">gui.transparency(int trans)</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="rvts58">function gui.register(function func)</span></p>
<p><span class="rvts58"><br/></span></p>
<p><span class="rvts61">function gui.register(function func)</span></p>
<p><span class="rvts61"><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="rvts58">string gui.popup(string message [, string type = "ok" [, string icon = "message"]])</span></p>
<p><span class="rvts58">string input.popup(string message [, string type = "yesno" [, string icon = "question"]])</span></p>
<p><span class="rvts61">string gui.popup(string message [, string type = "ok" [, string icon = "message"]])</span></p>
<p><span class="rvts61">string input.popup(string message [, string type = "yesno" [, string icon = "question"]])</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>
@ -651,9 +651,9 @@
<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="rvts67">Sound Library</span></p>
<p><span class="rvts70">Sound Library</span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts58">table sound.get()</span></p>
<p><span class="rvts61">table sound.get()</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>
@ -722,59 +722,59 @@
<p><span class="rvts37">}</span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts67">TAS Editor Library</span></p>
<p><span class="rvts58"><br/></span></p>
<p><span class="rvts58">taseditor.registerauto(function func)</span></p>
<p><span class="rvts58">taseditor.registermanual(function func)</span></p>
<p><span class="rvts58">bool taseditor.engaged()</span></p>
<p><span class="rvts58">bool taseditor.markedframe(int frame)</span></p>
<p><span class="rvts58">int taseditor.getmarker(int frame)</span></p>
<p><span class="rvts58">int taseditor.setmarker(int frame)</span></p>
<p><span class="rvts58">taseditor.clearmarker(int frame)</span></p>
<p><span class="rvts58">string taseditor.getnote(int index)</span></p>
<p><span class="rvts58">taseditor.setnote(int index, string newtext)</span></p>
<p><span class="rvts58">int taseditor.getcurrentbranch()</span></p>
<p><span class="rvts58">string taseditor.getrecordermode()</span></p>
<p><span class="rvts58">int taseditor.getsuperimpose()</span></p>
<p><span class="rvts58">int taseditor.getlostplayback()</span></p>
<p><span class="rvts58">int taseditor.getplaybacktarget()</span></p>
<p><span class="rvts58">taseditor.setplayback(int frame)</span></p>
<p><span class="rvts58">taseditor.stopseeking()</span></p>
<p><span class="rvts58">taseditor.getselection()</span></p>
<p><span class="rvts58">taseditor.setselection()</span></p>
<p><span class="rvts58">int taseditor.getinput(int frame, int joypad)</span></p>
<p><span class="rvts58">taseditor.submitinputchange(int frame, int joypad, int input)</span></p>
<p><span class="rvts58">taseditor.submitinsertframes(int frame, int number)</span></p>
<p><span class="rvts58">taseditor.submitdeleteframes(int frame, int number)</span></p>
<p><span class="rvts58">int taseditor.applyinputchanges([string name])</span></p>
<p><span class="rvts58">taseditor.clearinputchanges()</span></p>
<p><span class="rvts70">TAS Editor Library</span></p>
<p><span class="rvts61"><br/></span></p>
<p><span class="rvts61">taseditor.registerauto(function func)</span></p>
<p><span class="rvts61">taseditor.registermanual(function func)</span></p>
<p><span class="rvts61">bool taseditor.engaged()</span></p>
<p><span class="rvts61">bool taseditor.markedframe(int frame)</span></p>
<p><span class="rvts61">int taseditor.getmarker(int frame)</span></p>
<p><span class="rvts61">int taseditor.setmarker(int frame)</span></p>
<p><span class="rvts61">taseditor.clearmarker(int frame)</span></p>
<p><span class="rvts61">string taseditor.getnote(int index)</span></p>
<p><span class="rvts61">taseditor.setnote(int index, string newtext)</span></p>
<p><span class="rvts61">int taseditor.getcurrentbranch()</span></p>
<p><span class="rvts61">string taseditor.getrecordermode()</span></p>
<p><span class="rvts61">int taseditor.getsuperimpose()</span></p>
<p><span class="rvts61">int taseditor.getlostplayback()</span></p>
<p><span class="rvts61">int taseditor.getplaybacktarget()</span></p>
<p><span class="rvts61">taseditor.setplayback(int frame)</span></p>
<p><span class="rvts61">taseditor.stopseeking()</span></p>
<p><span class="rvts61">taseditor.getselection()</span></p>
<p><span class="rvts61">taseditor.setselection()</span></p>
<p><span class="rvts61">int taseditor.getinput(int frame, int joypad)</span></p>
<p><span class="rvts61">taseditor.submitinputchange(int frame, int joypad, int input)</span></p>
<p><span class="rvts61">taseditor.submitinsertframes(int frame, int number)</span></p>
<p><span class="rvts61">taseditor.submitdeleteframes(int frame, int number)</span></p>
<p><span class="rvts61">int taseditor.applyinputchanges([string name])</span></p>
<p><span class="rvts61">taseditor.clearinputchanges()</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="rvts56">Bitwise Operations</span></p>
<p><span class="rvts59">Bitwise Operations</span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">The following bit functions were added to FCEUX internally to compensate for Lua's lack of them. But it also supports all operations from </span><a class="rvts66" href="http://bitop.luajit.org/api.html">LuaBitOp</a><span class="rvts37"> module, since it is also embedded in FCEUX.</span></p>
<p><span class="rvts37">The following bit functions were added to FCEUX internally to compensate for Lua's lack of them. But it also supports all operations from </span><a class="rvts69" href="http://bitop.luajit.org/api.html">LuaBitOp</a><span class="rvts37"> module, since it is also embedded in FCEUX.</span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts60">int AND(int n1, int n2, ..., int nn)</span></p>
<p><span class="rvts60"><br/></span></p>
<p><span class="rvts63">int AND(int n1, int n2, ..., int nn)</span></p>
<p><span class="rvts63"><br/></span></p>
<p><span class="rvts37">Binary logical AND of all the given integers.</span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts60">int OR(int n1, int n2, ..., int nn)</span></p>
<p><span class="rvts63">int OR(int n1, int n2, ..., int nn)</span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Binary logical OR of all the given integers.</span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts60">int XOR(int n1, int n2, ..., int nn)</span></p>
<p><span class="rvts63">int XOR(int n1, int n2, ..., int nn)</span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts37">Binary logical XOR of all the given integers. </span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts60">int BIT(int n1, int n2, ..., int nn)</span></p>
<p><span class="rvts63">int BIT(int n1, int n2, ..., int nn)</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="rvts61">Appendix</span></p>
<p><span class="rvts64">Appendix</span></p>
<p><span class="rvts37"><br/></span></p>
<p><span class="rvts62">On drawing</span></p>
<p><span class="rvts65">On drawing</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>
@ -782,7 +782,7 @@
<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="rvts62">On colors</span></p>
<p><span class="rvts65">On colors</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>

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 Personal Edition 3.8.0.560">
<meta name="generator" content="HelpNDoc Personal Edition 3.9.1.648">
<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" />
@ -56,19 +56,19 @@
<div id="topic_content">
<p></p>
<p><span class="rvts55">Using Lua scripting</span></p>
<p><span class="rvts58">Using Lua scripting</span></p>
<p><span class="rvts32"><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>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="rvts55"><br/></span></p>
<p><span class="rvts55">Core Lua Documentation</span></p>
<p><span class="rvts58"><br/></span></p>
<p><span class="rvts58">Core Lua Documentation</span></p>
<p><span class="rvts32"><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>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="rvts55"><br/></span></p>
<p><span class="rvts55">GUI Frontend</span></p>
<p><span class="rvts58"><br/></span></p>
<p><span class="rvts58">GUI Frontend</span></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>
@ -76,7 +76,7 @@
<p><br/></p>
<p>To end a Lua script, choose "Stop Lua Script" ***from where***.</p>
<p><br/></p>
<p><span class="rvts55">FCEUX Lua Basics</span></p>
<p><span class="rvts58">FCEUX Lua Basics</span></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>

View File

@ -3,7 +3,7 @@
<head>
<title>LuaPerks</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.8.0.560">
<meta name="generator" content="HelpNDoc Personal Edition 3.9.1.648">
<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" />
@ -61,47 +61,47 @@
<p>The following Lua libraries are integrated into FCEUX win32-executable and are available for using in your scripts.</p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts57">IUP library</span></p>
<p><span class="rvts60">IUP library</span></p>
<p><br/></p>
<p>IUP (Portable User Interface) is a toolkit for building graphical user interfaces.</p>
<p><br/></p>
<p>Usage example: \luaScripts\GUI-iup_example.lua </p>
<p><br/></p>
<p><a class="rvts70" href="http://www.tecgraf.puc-rio.br/iup/" target="_blank">http://www.tecgraf.puc-rio.br/iup/</a></p>
<p><a class="rvts73" href="http://www.tecgraf.puc-rio.br/iup/" target="_blank">http://www.tecgraf.puc-rio.br/iup/</a></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts57">IM library</span></p>
<p><span class="rvts60">IM library</span></p>
<p><br/></p>
<p>IM is a toolkit for Digital Imaging. The main goal of the library is to provide a simple API and abstraction of images for applications.</p>
<p>File formats supported: TIFF, BMP, PNG, JPEG, GIF and AVI. Image representation includes scientific data types. About a hundred Image Processing operations are available.</p>
<p><br/></p>
<p><a class="rvts70" href="http://www.tecgraf.puc-rio.br/im/" target="_blank">http://www.tecgraf.puc-rio.br/im/</a></p>
<p><a class="rvts73" href="http://www.tecgraf.puc-rio.br/im/" target="_blank">http://www.tecgraf.puc-rio.br/im/</a></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts57">CD library</span></p>
<p><span class="rvts60">CD library</span></p>
<p><br/></p>
<p>Canvas Draw is a graphics library.</p>
<p>The library contains functions to support both vector and image applications, and the visualization surface can be either a window or a more abstract surface, such as Image, Clipboard, Metafile, PS, and so on.</p>
<p><br/></p>
<p><a class="rvts70" href="http://www.tecgraf.puc-rio.br/cd/" target="_blank">http://www.tecgraf.puc-rio.br/cd/</a></p>
<p><a class="rvts73" href="http://www.tecgraf.puc-rio.br/cd/" target="_blank">http://www.tecgraf.puc-rio.br/cd/</a></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts57">LuaSocket library</span></p>
<p><span class="rvts60">LuaSocket library</span></p>
<p><br/></p>
<p>LuaSocket is a Lua extension library that is composed by two parts: a C core that provides support for the TCP and UDP transport layers, and a set of Lua modules that add support for the SMTP (sending e-mails), HTTP (WWW access) and FTP (uploading and downloading files) protocols and other functionality commonly needed by applications that deal with the Internet.</p>
<p><br/></p>
<p>Usage: netplay, local data transmission, accessing Web data.</p>
<p><br/></p>
<p><a class="rvts70" href="http://w3.impa.br/~diego/software/luasocket/home.html" target="_blank">http://w3.impa.br/~diego/software/luasocket/home.html</a></p>
<p><a class="rvts73" href="http://w3.impa.br/~diego/software/luasocket/home.html" target="_blank">http://w3.impa.br/~diego/software/luasocket/home.html</a></p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts57">WinAPI library</span></p>
<p><span class="rvts60">WinAPI library</span></p>
<p><br/></p>
<p>This module provides basic tools for working with Windows system resources.</p>
<p><br/></p>
<p>Usage example: \luaScripts\JumpingFCEUXWindow.lua</p>
<p><br/></p>
<p><a class="rvts70" href="https://github.com/stevedonovan/winapi" target="_blank">https://github.com/stevedonovan/winapi</a></p>
<p><a class="rvts73" href="https://github.com/stevedonovan/winapi" target="_blank">https://github.com/stevedonovan/winapi</a></p>
<p><br/></p>
<p><br/></p>
<p><br/></p>

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 Personal Edition 3.8.0.560">
<meta name="generator" content="HelpNDoc Personal Edition 3.9.1.648">
<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" />
@ -61,23 +61,23 @@
<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><a class="rvts54" href="LuaGettingStarted.html">Getting Started</a></p>
<p><a class="rvts57" href="LuaGettingStarted.html">Getting Started</a></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><a class="rvts54" href="Commands.html">Using Lua</a></p>
<p><a class="rvts57" href="Commands.html">Using Lua</a></p>
<p><br/></p>
<p>How to use Lua and basic syntax/commands that are useable under FCEUX.</p>
<p><br/></p>
<p><a class="rvts54" href="LuaFunctionsList.html">Lua Functions List</a></p>
<p><a class="rvts57" href="LuaFunctionsList.html">Lua Functions List</a></p>
<p><br/></p>
<p>A list of Lua functions available in FCEUX and a brief description of each.</p>
<p><br/></p>
<p><a class="rvts54" href="LuaPerks.html">LuaPerks</a></p>
<p><a class="rvts57" href="LuaPerks.html">LuaPerks</a></p>
<p><br/></p>
<p>Additional libraries integrated into FCEUX.</p>
<p><br/></p>
<p><a class="rvts54" href="LuaBot.html">Lua Bot</a></p>
<p><a class="rvts57" href="LuaBot.html">Lua Bot</a></p>
<p><br/></p>
<p>How to use Luau's version of Basic bot.</p>
<p><br/></p>

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 Personal Edition 3.8.0.560">
<meta name="generator" content="HelpNDoc Personal Edition 3.9.1.648">
<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" />

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 Personal Edition 3.8.0.560">
<meta name="generator" content="HelpNDoc Personal Edition 3.9.1.648">
<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" />

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 Personal Edition 3.8.0.560">
<meta name="generator" content="HelpNDoc Personal Edition 3.9.1.648">
<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" />

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 Personal Edition 3.8.0.560">
<meta name="generator" content="HelpNDoc Personal Edition 3.9.1.648">
<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" />

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 Personal Edition 3.8.0.560">
<meta name="generator" content="HelpNDoc Personal Edition 3.9.1.648">
<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" />

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 Personal Edition 3.8.0.560">
<meta name="generator" content="HelpNDoc Personal Edition 3.9.1.648">
<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" />

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 Personal Edition 3.8.0.560">
<meta name="generator" content="HelpNDoc Personal Edition 3.9.1.648">
<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" />

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 Personal Edition 3.8.0.560">
<meta name="generator" content="HelpNDoc Personal Edition 3.9.1.648">
<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" />
@ -232,7 +232,7 @@
<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="rvts29">Teenage Mutant Ninja Turtles</span>.</p>
<p><br/></p>
<p><span class="rvts32">Block 4</span></p>
<p><span class="rvts72"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts72"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts72"> &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="rvts75"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts75"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts75"> &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="rvts28">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>
<p><span class="rvts28">ID counter: &nbsp; &nbsp; &nbsp; 041x: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00</span></p>
<p><span class="rvts28">Timer/sp change: &nbsp;042x: 02 00 00 00 00 03 03 03 03 00 00 00 00 00 00 00</span></p>

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 Personal Edition 3.8.0.560">
<meta name="generator" content="HelpNDoc Personal Edition 3.9.1.648">
<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" />

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 Personal Edition 3.8.0.560">
<meta name="generator" content="HelpNDoc Personal Edition 3.9.1.648">
<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" />

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 Personal Edition 3.8.0.560">
<meta name="generator" content="HelpNDoc Personal Edition 3.9.1.648">
<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" />
@ -259,18 +259,18 @@
<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><span class="rvts64">Device</span><span class="rvts64"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts64"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts64"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts64"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts64"> Triangle Noise &nbsp;Square</span></p>
<p><span class="rvts64">------</span><span class="rvts64"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts64"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts64"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts64"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts64"> -------- ------ ------</span></p>
<p><span class="rvts64">triangle step generator</span><span class="rvts64"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts64"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts64"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts64">X</span></p>
<p><span class="rvts64">linear counter</span><span class="rvts64"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts64"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts64"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts64"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts64">X</span></p>
<p><span class="rvts64">programmable timer</span><span class="rvts64"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts64"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts64"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts64">X &nbsp; &nbsp; &nbsp;X &nbsp; &nbsp; &nbsp;X</span></p>
<p><span class="rvts64">length counter</span><span class="rvts64"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts64"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts64"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts64"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts64">X &nbsp; &nbsp; &nbsp;X &nbsp; &nbsp; &nbsp;X</span></p>
<p><span class="rvts64">4-bit DAC</span><span class="rvts64"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts64"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts64"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts64"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts64"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts64">X &nbsp; &nbsp; &nbsp;X &nbsp; &nbsp; &nbsp;X</span></p>
<p><span class="rvts64">volume/envelope decay unit</span><span class="rvts64"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts64"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts64"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts64"> X &nbsp; &nbsp; &nbsp;X</span></p>
<p><span class="rvts64">sweep unit</span><span class="rvts64"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts64"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts64"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts64"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts64"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts64"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts64"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts64"> &nbsp;X</span></p>
<p><span class="rvts64">duty cycle generator</span><span class="rvts64"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts64"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts64"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts64"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts64"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts64"> &nbsp;X</span></p>
<p><span class="rvts64">wavelength converter</span><span class="rvts64"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts64"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts64"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts64"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts64"> X</span></p>
<p><span class="rvts64">random number generator</span><span class="rvts64"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts64"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts64"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts64"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts64"> X</span></p>
<p><span class="rvts67">Device</span><span class="rvts67"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts67"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts67"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts67"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts67"> Triangle Noise &nbsp;Square</span></p>
<p><span class="rvts67">------</span><span class="rvts67"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts67"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts67"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts67"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts67"> -------- ------ ------</span></p>
<p><span class="rvts67">triangle step generator</span><span class="rvts67"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts67"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts67"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts67">X</span></p>
<p><span class="rvts67">linear counter</span><span class="rvts67"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts67"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts67"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts67"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts67">X</span></p>
<p><span class="rvts67">programmable timer</span><span class="rvts67"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts67"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts67"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts67">X &nbsp; &nbsp; &nbsp;X &nbsp; &nbsp; &nbsp;X</span></p>
<p><span class="rvts67">length counter</span><span class="rvts67"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts67"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts67"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts67"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts67">X &nbsp; &nbsp; &nbsp;X &nbsp; &nbsp; &nbsp;X</span></p>
<p><span class="rvts67">4-bit DAC</span><span class="rvts67"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts67"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts67"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts67"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts67"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts67">X &nbsp; &nbsp; &nbsp;X &nbsp; &nbsp; &nbsp;X</span></p>
<p><span class="rvts67">volume/envelope decay unit</span><span class="rvts67"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts67"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts67"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts67"> X &nbsp; &nbsp; &nbsp;X</span></p>
<p><span class="rvts67">sweep unit</span><span class="rvts67"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts67"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts67"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts67"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts67"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts67"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts67"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts67"> &nbsp;X</span></p>
<p><span class="rvts67">duty cycle generator</span><span class="rvts67"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts67"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts67"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts67"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts67"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts67"> &nbsp;X</span></p>
<p><span class="rvts67">wavelength converter</span><span class="rvts67"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts67"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts67"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts67"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts67"> X</span></p>
<p><span class="rvts67">random number generator</span><span class="rvts67"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts67"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts67"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts67"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts67"> X</span></p>
<p><br/></p>
<p><br/></p>
<p>+-------------------------+</p>

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 Personal Edition 3.8.0.560">
<meta name="generator" content="HelpNDoc Personal Edition 3.9.1.648">
<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" />

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 Personal Edition 3.8.0.560">
<meta name="generator" content="HelpNDoc Personal Edition 3.9.1.648">
<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" />

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 Personal Edition 3.8.0.560">
<meta name="generator" content="HelpNDoc Personal Edition 3.9.1.648">
<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" />

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 Personal Edition 3.8.0.560">
<meta name="generator" content="HelpNDoc Personal Edition 3.9.1.648">
<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" />

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 Personal Edition 3.8.0.560">
<meta name="generator" content="HelpNDoc Personal Edition 3.9.1.648">
<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" />

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 Personal Edition 3.8.0.560">
<meta name="generator" content="HelpNDoc Personal Edition 3.9.1.648">
<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" />

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 Personal Edition 3.8.0.560">
<meta name="generator" content="HelpNDoc Personal Edition 3.9.1.648">
<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" />

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 Personal Edition 3.8.0.560">
<meta name="generator" content="HelpNDoc Personal Edition 3.9.1.648">
<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" />

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 Personal Edition 3.8.0.560">
<meta name="generator" content="HelpNDoc Personal Edition 3.9.1.648">
<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" />

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 Personal Edition 3.8.0.560">
<meta name="generator" content="HelpNDoc Personal Edition 3.9.1.648">
<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" />

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 Personal Edition 3.8.0.560">
<meta name="generator" content="HelpNDoc Personal Edition 3.9.1.648">
<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" />

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 Personal Edition 3.8.0.560">
<meta name="generator" content="HelpNDoc Personal Edition 3.9.1.648">
<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" />

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 Personal Edition 3.8.0.560">
<meta name="generator" content="HelpNDoc Personal Edition 3.9.1.648">
<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" />

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 Personal Edition 3.8.0.560">
<meta name="generator" content="HelpNDoc Personal Edition 3.9.1.648">
<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" />

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 Personal Edition 3.8.0.560">
<meta name="generator" content="HelpNDoc Personal Edition 3.9.1.648">
<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" />

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 Personal Edition 3.8.0.560">
<meta name="generator" content="HelpNDoc Personal Edition 3.9.1.648">
<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" />

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 Personal Edition 3.8.0.560">
<meta name="generator" content="HelpNDoc Personal Edition 3.9.1.648">
<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" />

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 Personal Edition 3.8.0.560">
<meta name="generator" content="HelpNDoc Personal Edition 3.9.1.648">
<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" />

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 Personal Edition 3.8.0.560">
<meta name="generator" content="HelpNDoc Personal Edition 3.9.1.648">
<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" />

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 Personal Edition 3.8.0.560">
<meta name="generator" content="HelpNDoc Personal Edition 3.9.1.648">
<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" />

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 Personal Edition 3.8.0.560">
<meta name="generator" content="HelpNDoc Personal Edition 3.9.1.648">
<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" />

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 Personal Edition 3.8.0.560">
<meta name="generator" content="HelpNDoc Personal Edition 3.9.1.648">
<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" />
@ -56,7 +56,7 @@
<div id="topic_content">
<p></p>
<p><span class="rvts46">Trace Logger</span></p>
<p><span class="rvts56">Trace Logger</span></p>
<p><br/></p>
<p><span class="rvts16">Introduction</span></p>
<p><br/></p>

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 Personal Edition 3.8.0.560">
<meta name="generator" content="HelpNDoc Personal Edition 3.9.1.648">
<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" />

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 Personal Edition 3.8.0.560">
<meta name="generator" content="HelpNDoc Personal Edition 3.9.1.648">
<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" />

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 Personal Edition 3.8.0.560">
<meta name="generator" content="HelpNDoc Personal Edition 3.9.1.648">
<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" />

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 Personal Edition 3.8.0.560">
<meta name="generator" content="HelpNDoc Personal Edition 3.9.1.648">
<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" />

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 Personal Edition 3.8.0.560">
<meta name="generator" content="HelpNDoc Personal Edition 3.9.1.648">
<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" />

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 Personal Edition 3.8.0.560">
<meta name="generator" content="HelpNDoc Personal Edition 3.9.1.648">
<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" />

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 Personal Edition 3.8.0.560">
<meta name="generator" content="HelpNDoc Personal Edition 3.9.1.648">
<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" />

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 Personal Edition 3.8.0.560">
<meta name="generator" content="HelpNDoc Personal Edition 3.9.1.648">
<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" />

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 Personal Edition 3.8.0.560">
<meta name="generator" content="HelpNDoc Personal Edition 3.9.1.648">
<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" />

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 Personal Edition 3.8.0.560">
<meta name="generator" content="HelpNDoc Personal Edition 3.9.1.648">
<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" />

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 Personal Edition 3.8.0.560">
<meta name="generator" content="HelpNDoc Personal Edition 3.9.1.648">
<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" />

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 Personal Edition 3.8.0.560">
<meta name="generator" content="HelpNDoc Personal Edition 3.9.1.648">
<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" />

View File

@ -3,7 +3,7 @@
<head>
<title>What's New? 2.2.0 (changelog)</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.8.0.560">
<meta name="generator" content="HelpNDoc Personal Edition 3.9.1.648">
<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" />

View File

@ -3,7 +3,7 @@
<head>
<title>What's New? 2.2.1 (changelog)</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.8.0.560">
<meta name="generator" content="HelpNDoc Personal Edition 3.9.1.648">
<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" />
@ -46,7 +46,7 @@
<div id="topic_header_nav">
<a href="Intro.html"><img src="img/arrow_up.png" alt="Parent"/></a>
<a href="FCEUltraVersionHistory.html"><img src="img/arrow_left.png" alt="Previous"/></a>
<a href="WhatsNew222.html"><img src="img/arrow_left.png" alt="Previous"/></a>
<a href="WhatsNew220.html"><img src="img/arrow_right.png" alt="Next"/></a>

181
help/WhatsNew222.html Normal file
View File

@ -0,0 +1,181 @@
<html>
<head>
<title>What's New? 2.2.2 (changelog)</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.9.1.648">
<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" />
<!--[if lte IE 8]>
<link type="text/css" rel="stylesheet" media="all" href="css/ielte8.css" />
<![endif]-->
<style type="text/css">
#topic_header
{
background-color: #EFEFEF;
}
</style>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/hnd.js"></script>
<script type="text/javascript">
$(document).ready(function()
{
if (top.frames.length == 0)
{
var sTopicUrl = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length);
top.location.href = "fceux.html?" + sTopicUrl;
}
else if (top && top.FrameTOC && top.FrameTOC.SelectTocItem)
{
top.FrameTOC.SelectTocItem("WhatsNew222");
}
});
</script>
</head>
<body>
<div id="topic_header">
<div id="topic_header_content">
<h1>What's New? 2.2.2 (changelog)</h1>
<div id="topic_breadcrumb">
<a href="Intro.html">Introduction</a> &rsaquo;&rsaquo; </div>
</div>
<div id="topic_header_nav">
<a href="Intro.html"><img src="img/arrow_up.png" alt="Parent"/></a>
<a href="FCEUltraVersionHistory.html"><img src="img/arrow_left.png" alt="Previous"/></a>
<a href="WhatsNew221.html"><img src="img/arrow_right.png" alt="Next"/></a>
</div>
<div class="clear"></div>
</div>
<div id="topic_content">
<p></p>
<p><span class="rvts17">What's New? </span><span class="rvts21">2.2.2</span></p>
<p>Released -- ?? ???? 2013</p>
<p><br/></p>
<p><br/></p>
<p>The 2.2.2 release fixes a number of emulation bugs and adds many new features, most of which are related to debugging.</p>
<p><span class="rvts24"><br/></span></p>
<p><span class="rvts23">Common </span></p>
<ul style="text-indent: 0px; margin-left: 24px; list-style-position: outside;">
<li class="rvps3"><span class="rvts20">"Auto-resume old play session" now also works with NSFs</span></li>
</ul>
<p><span class="rvts24"><br/></span></p>
<p><span class="rvts24">Emulation</span></p>
<ul style="text-indent: 0px; margin-left: 24px; list-style-position: outside;">
<li><span class="rvts22">Fixed mappers 178, 28, 53, 154, 43, 253, 19</span></li>
<li><span class="rvts20">Fixed UNIF 8157, UNIF T-262</span></li>
<li class="rvps3"><span class="rvts20">UNIF DANCE2000 - now emulated properly</span></li>
<li class="rvps3"><span class="rvts20">Palette RAM reading fix for Old PPU</span></li>
<li class="rvps3"><span class="rvts20">Bring some improvements to New PPU from BizHawk, fix vtoggle5/6 back to vtoggle</span></li>
<li class="rvps3"><span class="rvts20">Add missing mmc5 savestate variables</span></li>
<li class="rvps3"><span class="rvts20">Properly savestate NSF files</span></li>
</ul>
<p><span class="rvts24"><br/></span></p>
<p><span class="rvts24">Lua</span></p>
<ul style="text-indent: 0px; margin-left: 24px; list-style-position: outside;">
<li class="rvps3"><span class="rvts20">Fix wrong frequency calculation in sound.get() function</span></li>
</ul>
<p><span class="rvts22"><br/></span></p>
<p><span class="rvts22">New Lua functions:</span></p>
<ul style="text-indent: 0px; margin-left: 24px; list-style-position: outside;">
<li><span class="rvts22">debugger.hitbreakpoint()</span></li>
<li><span class="rvts22">debugger.getcyclescount()</span></li>
<li><span class="rvts22">debugger.getinstructionscount()</span></li>
<li><span class="rvts22">debugger.resetcyclescount()</span></li>
<li><span class="rvts22">debugger.resetinstructionscount(), </span></li>
</ul>
<p><span class="rvts22"><br/></span></p>
<p><span class="rvts22">New scripts:</span></p>
<ul style="text-indent: 0px; margin-left: 24px; list-style-position: outside;">
<li><span class="rvts22"></span></li>
</ul>
<p><span class="rvts24"><br/></span></p>
<p><span class="rvts24">Win32</span></p>
<ul style="text-indent: 0px; margin-left: 24px; list-style-position: outside;">
<li class="rvps3"><span class="rvts20">Added "Square pixels" option to Video Config</span></li>
<li class="rvps3"><span class="rvts20">Added aspect ratio fields for customizing "TV Aspect" ratio, by default it's 4:3</span></li>
<li class="rvps3"><span class="rvts20">Changed "Disable hardware acceleration" checkbox to a drop-down list with 3 options</span></li>
<li class="rvps3"><span class="rvts20">Dynamic link to lua51.dll instead of static linking, because many of external libraries can crash without lua51.dll</span></li>
<li class="rvps3"><span class="rvts20">Updated 7z.dll to v9.22</span></li>
<li class="rvps3"><span class="rvts20">A couple of fixes which deal with "multiple ROMs in a single archive" case</span></li>
<li class="rvps3"><span class="rvts20">When no script is currently running, Shift+L loads the most recent Lua script</span></li>
<li class="rvps3"><span class="rvts20">Movie recording: remember last Author name when creating a new movie</span></li>
<li class="rvps3"><span class="rvts20">Movie recording: added ability to record "Insert coin" command (for VS games)</span></li>
<li class="rvps3"><span class="rvts20">Auto-disable "Game Genie ROM" feature when no "gg.rom" file is found</span></li>
</ul>
<p><span class="rvts24"><br/></span></p>
<p><span class="rvts23">TAS Editor</span></p>
<ul style="text-indent: 0px; margin-left: 24px; list-style-position: outside;">
<li class="rvps3"><span class="rvts20">Comply with Lua movie.rerecordcounting() setting</span></li>
<li class="rvps3"><span class="rvts20">Fixed workflow with "Auto-adjust Input according to Lag" disabled</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 class="rvps3"><span class="rvts20">Smart scrolling up/down by whole instructions - ported from an obscure version of FCEUXD 1.1</span></li>
<li class="rvps3"><span class="rvts20">Clever autoscrolling maintains relative position of the "&gt;" pointer inside the Disassembly window</span></li>
<li class="rvps3"><span class="rvts20">Highlight PC pointer line when a breakpoint is hit</span></li>
<li class="rvps3"><span class="rvts20">Fixed storing and loading .deb files when working with archived ROMs</span></li>
<li class="rvps3"><span class="rvts20">Fixed Cycles counter reset when loading an earlier savestate</span></li>
<li class="rvps3"><span class="rvts20">Added CDL data column to the left from Disassembly, to distinguish executed branches of code from not logged code</span></li>
<li class="rvps3"><span class="rvts20">Added 'T' condition (checks the bank of the data accessed), see docs</span></li>
</ul>
<p><span class="rvts23"><br/></span></p>
<p><span class="rvts23">Trace Logger</span></p>
<ul style="text-indent: 0px; margin-left: 24px; list-style-position: outside;">
<li class="rvps3"><span class="rvts20">Added "Log Cycles count" and "Log Instructions count" options</span></li>
<li><span class="rvts22">Only output "from $XXXX" when the subroutine was called by JSR</span></li>
</ul>
<p><span class="rvts24"><br/></span></p>
<p><span class="rvts23">PPU Viewer</span></p>
<ul style="text-indent: 0px; margin-left: 24px; list-style-position: outside;">
<li><span class="rvts22">When CDLogger is on, display unused graphics in a dim palette</span></li>
</ul>
<p><span class="rvts24"><br/></span></p>
<p><span class="rvts23">Hex Editor</span></p>
<ul style="text-indent: 0px; margin-left: 24px; list-style-position: outside;">
<li class="rvps3"><span class="rvts20">Added "Highlighting" submenu and "Highlight Activity" feature</span></li>
<li class="rvps3"><span class="rvts20">Specify Data bank condition when adding a Breakpoint by context menu</span></li>
<li class="rvps3"><span class="rvts20">Fixed bugs when saving files while working with ROMs in archives</span></li>
</ul>
<p><span class="rvts24"><br/></span></p>
<p><span class="rvts23">RAM Search/RAM Watch</span></p>
<ul style="text-indent: 0px; margin-left: 24px; list-style-position: outside;">
<li><span class="rvts22">Added "Hex Editor" button to RAM Search (right-click on an address works as well)</span></li>
<li><span class="rvts22">Fixed RAM Watch bug when contents of old .wch file were mixed with the newly saved data</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"></span></li>
</ul>
<p><span class="rvts24"><br/></span></p>
<p><span class="rvts24">SDL</span></p>
<ul style="text-indent: 0px; margin-left: 24px; list-style-position: outside;">
<li class="rvps3"><span class="rvts20">Fixed bug where fceux would take exclusive grab of input in windowed mode when resuming from pause</span></li>
<li class="rvps3"><span class="rvts20"></span></li>
</ul>
<p><span class="rvts24"><br/></span></p>
<p><span class="rvts24"><br/></span></p>
<p><span class="rvts24"><br/></span></p>
<p><span class="rvts24"><br/></span></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/create-epub-ebooks">Generate EPub eBooks with ease</a></p>
</div>
<div id="topic_footer">
<div id="topic_footer_content">
2013</div>
</div>
</body>
</html>

View File

@ -36,24 +36,24 @@ a.rvts5, span.rvts5 /* Jump 2 */
}
span.rvts6
{
color: #a0a0a0;
color: #71593e;
}
span.rvts7
{
font-size: 15pt;
font-family: 'Tahoma', 'Geneva', sans-serif;
font-weight: bold;
color: #696969;
color: #404040;
}
span.rvts8
{
font-weight: bold;
color: #a0a0a0;
color: #71593e;
}
span.rvts9
{
font-style: italic;
color: #a0a0a0;
color: #71593e;
}
span.rvts10
{
@ -237,159 +237,171 @@ span.rvts45
}
span.rvts46
{
font-size: 22pt;
text-decoration: underline;
color: #0000ff;
}
span.rvts47
{
color: #00be00;
color: #00cc00;
}
span.rvts48
{
color: #a08c00;
color: #ff0000;
}
span.rvts49
{
color: #0000c3;
color: #00be00;
}
span.rvts50
{
color: #0082a0;
color: #a08c00;
}
span.rvts51
{
color: #d2be00;
color: #0000c3;
}
span.rvts52
{
color: #0a0aff;
color: #0082a0;
}
span.rvts53
{
color: #d2be00;
}
span.rvts54
{
color: #0a0aff;
}
span.rvts55
{
color: #05ff05;
}
a.rvts54, span.rvts54
span.rvts56
{
font-size: 22pt;
text-decoration: underline;
}
a.rvts57, span.rvts57
{
font-size: 12pt;
color: #0000ff;
text-decoration: underline;
}
a.rvts54:hover { color: #0000ff; }
span.rvts55
a.rvts57:hover { color: #0000ff; }
span.rvts58
{
font-size: 18pt;
font-weight: bold;
}
span.rvts56
{
font-size: 12pt;
font-family: 'Courier New', 'Courier', monospace;
font-weight: bold;
}
span.rvts57
{
font-size: 14pt;
font-weight: bold;
}
span.rvts58
{
font-size: 12pt;
font-family: 'Courier New', 'Courier', monospace;
color: #000080;
}
span.rvts59
{
font-size: 12pt;
font-family: 'Courier New', 'Courier', monospace;
color: #333399;
font-weight: bold;
}
span.rvts60
{
font-size: 14pt;
font-weight: bold;
}
span.rvts61
{
font-size: 12pt;
font-family: 'Courier New', 'Courier', monospace;
color: #000080;
}
span.rvts62
{
font-size: 12pt;
font-family: 'Courier New', 'Courier', monospace;
color: #333399;
}
span.rvts63
{
font-family: 'Courier New', 'Courier', monospace;
color: #000080;
}
span.rvts61
span.rvts64
{
font-size: 16pt;
font-family: 'Courier New', 'Courier', monospace;
font-weight: bold;
}
span.rvts62
span.rvts65
{
font-size: 11pt;
font-family: 'Courier New', 'Courier', monospace;
font-weight: bold;
}
span.rvts63
span.rvts66
{
font-family: 'Courier New', 'Courier', monospace;
font-weight: bold;
}
span.rvts64
span.rvts67
{
font-family: 'Courier New', 'Courier', monospace;
}
span.rvts65
span.rvts68
{
font-size: 12pt;
font-family: 'Courier New', 'Courier', monospace;
color: #000080;
}
a.rvts66, span.rvts66
a.rvts69, span.rvts69
{
font-family: 'Courier New', 'Courier', monospace;
color: #0000ff;
text-decoration: underline;
}
a.rvts66:hover { color: #0000ff; }
span.rvts67
a.rvts69:hover { color: #0000ff; }
span.rvts70
{
font-size: 14pt;
font-weight: bold;
}
span.rvts68 /* Font Style */
span.rvts71 /* Font Style */
{
font-size: 14pt;
}
span.rvts69
span.rvts72
{
font-family: 'Courier New', 'Courier', monospace;
font-weight: bold;
text-decoration: underline;
}
a.rvts70, span.rvts70
a.rvts73, span.rvts73
{
color: #0000ff;
text-decoration: underline;
}
a.rvts70:hover { color: #0000ff; }
a.rvts71, span.rvts71
a.rvts73:hover { color: #0000ff; }
a.rvts74, span.rvts74
{
font-size: 12pt;
color: #0000ff;
text-decoration: underline;
}
a.rvts71:hover { color: #0000ff; }
span.rvts72
a.rvts74:hover { color: #0000ff; }
span.rvts75
{
font-family: 'Lucida Console', 'Monaco', monospace;
text-decoration: underline;
}
span.rvts73
span.rvts76
{
font-weight: bold;
text-decoration: underline;
}
span.rvts74
span.rvts77
{
font-size: 11pt;
text-decoration: underline;
}
span.rvts75
span.rvts78
{
font-size: 5pt;
}
span.rvts76
span.rvts79
{
font-size: 5pt;
font-weight: bold;

View File

@ -4,13 +4,17 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.8.0.560">
<meta name="generator" content="HelpNDoc Personal Edition 3.9.1.648">
<title>FCEUX Help</title>
<script type="text/javascript">
function escapeHtml(unsafe) {
return unsafe.replace(/javascript/gi, "").replace(/script/gi, "").replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&#039;");
}
var sTopic = "";
if (top.location.href.lastIndexOf("?") > 0)
sTopic = top.location.href.substring(top.location.href.lastIndexOf("?") + 1, top.location.href.length);
if (sTopic == "") sTopic = "Introduction.html";
sTopic = escapeHtml(sTopic);
document.write('<frameset cols="250,*">');
document.write('<frame src="toc.html" name="FrameTOC">');
document.write('<frame src="' + sTopic + '" name="FrameMain">');

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 Personal Edition 3.8.0.560">
<meta name="generator" content="HelpNDoc Personal Edition 3.9.1.648">
<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" />

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 Personal Edition 3.8.0.560">
<meta name="generator" content="HelpNDoc Personal Edition 3.9.1.648">
<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" />

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 Personal Edition 3.8.0.560">
<meta name="generator" content="HelpNDoc Personal Edition 3.9.1.648">
<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" />
@ -90,41 +90,41 @@
<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> <span class="rvts32">- version</span> (required) - the version of the movie file format; for now it is always 3</p>
<p><span class="rvts75"><br/></span></p>
<p><span class="rvts78"><br/></span></p>
<p> <span class="rvts32">- emuVersion</span> (required) - the version of the emulator used to produce the movie</p>
<p><span class="rvts75"><br/></span></p>
<p><span class="rvts78"><br/></span></p>
<p> <span class="rvts32">- rerecordCount</span> (optional) - the rerecord count</p>
<p><span class="rvts75"><br/></span></p>
<p><span class="rvts78"><br/></span></p>
<p> -<span class="rvts32"> palFlag</span> (bool) (optional) - true if the movie uses PAL timing</p>
<p><span class="rvts75"><br/></span></p>
<p><span class="rvts78"><br/></span></p>
<p> -<span class="rvts32"> NewPPU</span> (bool) (optional) - true if the movie uses New PPU</p>
<p><span class="rvts75"><br/></span></p>
<p><span class="rvts78"><br/></span></p>
<p> <span class="rvts32">- FDS</span> (bool) (optional) - true if movie was recorded on a Famicom Disk System (FDS) game</p>
<p><span class="rvts75"><br/></span></p>
<p><span class="rvts78"><br/></span></p>
<p> <span class="rvts32">- fourscore</span> (bool) - true if a fourscore was used. If fourscore is not used, then port0 and port1 are required</p>
<p><span class="rvts75"><br/></span></p>
<p><span class="rvts78"><br/></span></p>
<p> <span class="rvts32">- 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="rvts75"><br/></span></p>
<p><span class="rvts78"><br/></span></p>
<p> <span class="rvts32">- 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="rvts75"><br/></span></p>
<p><span class="rvts78"><br/></span></p>
<p><span class="rvts32"> - 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="rvts75"><br/></span></p>
<p><span class="rvts78"><br/></span></p>
<p> <span class="rvts32">- binary</span> (bool) (optional) - true if input log is stored in binary format</p>
<p><span class="rvts75"><br/></span></p>
<p> <span class="rvts32">- 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="rvts73">fm3</span> format to allow storing extra data after the end of input log</p>
<p><span class="rvts78"><br/></span></p>
<p> <span class="rvts32">- 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="rvts76">fm3</span> format to allow storing extra data after the end of input log</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><span class="rvts32"> - romFilename</span> (required) - the name of the file used to record the movie</p>
<p><span class="rvts75"><br/></span></p>
<p><span class="rvts78"><br/></span></p>
<p><span class="rvts32"> - comment </span>(optional) - simply a memo</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>
@ -135,7 +135,7 @@
<ul style="text-indent: 0px; margin-left: 24px; list-style-position: outside;">
<li>comment author adelikat</li>
</ul>
<p><span class="rvts75"><br/></span></p>
<p><span class="rvts78"><br/></span></p>
<p><span class="rvts32"> - 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>
<ul style="text-indent: 0px; margin-left: 36px; list-style-position: outside;">
<li>by convention, subtitles begin with the word "subtitle"</li>
@ -147,12 +147,12 @@
<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="rvts75"><br/></span></p>
<p><span class="rvts78"><br/></span></p>
<p><span class="rvts32"> - 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="rvts76"><br/></span></p>
<p><span class="rvts79"><br/></span></p>
<p><span class="rvts32"> - romChecksum </span>(required) - the base64 of the hexified MD5 hash of the ROM which was used to record the movie</p>
<p><span class="rvts75"><br/></span></p>
<p><span class="rvts78"><br/></span></p>
<p><span class="rvts32"> - 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>
@ -162,7 +162,7 @@
<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><span class="rvts74">Text format (default format):</span></p>
<p><span class="rvts77">Text format (default format):</span></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>
@ -207,7 +207,7 @@
<p>{commands, player1, player2, player3, player4, port2}</p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts74">Binary format:</span></p>
<p><span class="rvts77">Binary format:</span></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>

View File

@ -1 +1 @@
jQuery.fn.highlight=function(a){function d(b,a){var e=0;if(b.nodeType==3){var c=b.data.toUpperCase().indexOf(a);if(c>=0){e=document.createElement("span");e.className="highlight";c=b.splitText(c);c.splitText(a.length);var g=c.cloneNode(!0);e.appendChild(g);c.parentNode.replaceChild(e,c);e=1}}else if(b.nodeType==1&&b.childNodes&&!/(script|style)/i.test(b.tagName))for(c=0;c<b.childNodes.length;++c)c+=d(b.childNodes[c],a);return e}return this.each(function(){d(this,a.toUpperCase())})}; jQuery.fn.removeHighlight=function(){return this.find("span.highlight").each(function(){with(this.parentNode)replaceChild(this.firstChild,this),normalize()}).end()};$.extend({getUrlVars:function(){for(var a=[],d,b=document.location.href.slice(document.location.href.indexOf("?")+1).split("&"),f=0;f<b.length;f++)d=b[f].split("="),a.push(d[0]),a[d[0]]=d[1];return a},getUrlVar:function(a){return $.getUrlVars()[a]}}); $(document).ready(function(){var a=unescape($.getUrlVar("search"));a&&a!=""&&$.each(a.split(" "),function(a,b){b!="AND"&&b!="NOT"&&b!="OR"&&$("body").highlight(b)})});
jQuery.fn.highlight=function(a){function d(b,a){var e=0;if(b.nodeType==3){var c=b.data.toUpperCase().indexOf(a);if(c>=0){e=document.createElement("span");e.className="highlight";c=b.splitText(c);c.splitText(a.length);var g=c.cloneNode(!0);e.appendChild(g);c.parentNode.replaceChild(e,c);e=1}}else if(b.nodeType==1&&b.childNodes&&!/(script|style)/i.test(b.tagName))for(c=0;c<b.childNodes.length;++c)c+=d(b.childNodes[c],a);return e}return this.each(function(){d(this,a.toUpperCase())})}; jQuery.fn.removeHighlight=function(){return this.find("span.highlight").each(function(){with(this.parentNode)replaceChild(this.firstChild,this),normalize()}).end()};$.extend({getUrlVars:function(){for(var a=[],d,b=document.location.href.slice(document.location.href.indexOf("?")+1).split("&"),f=0;f<b.length;f++)d=b[f].split("="),a.push(d[0]),a[d[0]]=d[1];return a},getUrlVar:function(a){return $.getUrlVars()[a]}}); $(document).ready(function(){var a=unescape($.getUrlVar("search"));a&&a!=""&&$.each(a.split(" "),function(a,b){b!="AND"&&b!="NOT"&&b!="OR"&&b!=""&&b!=" "&&$("body").highlight(b)})});

File diff suppressed because one or more lines are too long

View File

@ -4,7 +4,7 @@
<head>
<title>FCEUX Help- Table of Contents</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.8.0.560">
<meta name="generator" content="HelpNDoc Personal Edition 3.9.1.648">
<link type="text/css" rel="stylesheet" media="all" href="css/reset.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/silver-theme/jquery-ui-1.8.12.custom.css" />
<link type="text/css" rel="stylesheet" media="all" href="css/dynatree/chm/ui.dynatree.css" />
@ -176,7 +176,10 @@
var oUl = $("#search_results_content").append("<ul id='lr'></ul>").find("ul");
for (var nCnt = 0; nCnt < oSearchEngine.aResults.length; nCnt++)
{
oUl.append("<li><a href='" + aTl[oSearchEngine.aResults[nCnt]][0] + "?search=" + escape(sValue) + "' target='FrameMain'>" + unescape(aTl[oSearchEngine.aResults[nCnt]][1]) + "</a></li>");
if (oSearchEngine.aResults[nCnt] < aTl.length)
{
oUl.append("<li><a href='" + aTl[oSearchEngine.aResults[nCnt]][0] + "?search=" + escape(sValue) + "' target='FrameMain'>" + unescape(aTl[oSearchEngine.aResults[nCnt]][1]) + "</a></li>");
}
}
// Tree
$("#search_results_content").dynatree({
@ -231,6 +234,12 @@
target="FrameMain">
FCE Ultra Version History</a>
</li><li class="" id="WhatsNew222" data="">
<a
href="WhatsNew222.html"
target="FrameMain">
What's New? 2.2.2 (changelog)</a>
</li><li class="" id="WhatsNew221" data="">
<a
href="WhatsNew221.html"