recreate help files

This commit is contained in:
feos 2020-12-23 21:05:36 +03:00
parent 9fc4c98f04
commit b63b327d42
35 changed files with 811 additions and 908 deletions

Binary file not shown.

View File

@ -173,7 +173,7 @@
<li><a href="General.html">General</a></li>
</ol>
<div class="nav-arrows">
<div class="btn-group btn-group-xs" role="group"><a class="btn btn-default" href="General.html" title="General" role="button"><span class="glyphicon glyphicon-menu-up" aria-hidden="true"></span></a><a class="btn btn-default" href="FamicomDiskSytem.html" title="Famicom Disk System" role="button"><span class="glyphicon glyphicon-menu-left" aria-hidden="true"></span></a><a class="btn btn-default" href="MovieRecording.html" title="Movie Recording" role="button"><span class="glyphicon glyphicon-menu-right" aria-hidden="true"></span></a></div>
<div class="btn-group btn-group-xs" role="group"><a class="btn btn-default" href="General.html" title="General" role="button"><span class="glyphicon glyphicon-menu-up" aria-hidden="true"></span></a><a class="btn btn-default" href="FamicomDiskSystem.html" title="Famicom Disk System" role="button"><span class="glyphicon glyphicon-menu-left" aria-hidden="true"></span></a><a class="btn btn-default" href="MovieRecording.html" title="Movie Recording" role="button"><span class="glyphicon glyphicon-menu-right" aria-hidden="true"></span></a></div>
</div>
</div>

View File

@ -200,7 +200,7 @@
<p class="rvps2"><span class="rvts6">Alternate A and B is for a specific case where both the A and B autofire buttons are pressed simultaneously. &nbsp;With alternate A and B, the fire pattern will be A,B,A,B rather than A+B, off, A+B, off.</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">Note: All autofire patterns read the Lag Counter (see </span><span class="rvts70">display</span><span class="rvts6">) and skip over any frames where input is not polled. &nbsp;This means that in a laggy area, the autofire pattern will not be affected.</span></p>
<p class="rvps2"><span class="rvts6">Note: All autofire patterns read the Lag Counter (see </span><span class="rvts71">display</span><span class="rvts6">) and skip over any frames where input is not polled. &nbsp;This means that in a laggy area, the autofire pattern will not be affected.</span></p>
<p></p>
<p class="rvps4" style="clear: both;"><span class="rvts18">Created with the Personal Edition of HelpNDoc: </span><a class="rvts19" href="https://www.helpndoc.com/create-epub-ebooks">Full-featured EBook editor</a></p>

View File

@ -225,14 +225,15 @@
<p class="rvps2"><span class="rvts6">For simple "Substitute" type of cheats: * Address:Value</span></p>
<p class="rvps2"><span class="rvts6">For "Compare" type of cheats: * Address?Compare:Value</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">The "Address" is the location in the 6502's address space. &nbsp;The * denotes that the current cheat is active (double clicking will toggle on/off). "Value" is the value (in hex) that is written to the addresses on each update. "Compare" it the value that must be at the address, or else the Value won't be written there. This allows making cheats more safe.</span></p>
<p class="rvps2"><span class="rvts6">The "Address" is the location in the 6502's address space. &nbsp;The checkbox denotes that the current cheat is active or not (click on it will toggle on/off). "Value" is the value (in hex) that is written to the addresses on each update. "Compare" it the value that must be at the address, or else the Value won't be written there. This allows making cheats more safe.</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">You can Add, Delete, and Update cheats in the Active Cheats window with the boxes below.</span></p>
<p class="rvps2"><span class="rvts6">You can use "Add from CHT file..." button to load cheats from an existing file (in case the file name does not match the ROM name, so it didn't load automatically). Alternatively, you can drag and drop any .cht file into the FCEUX window.</span></p>
<p class="rvps2"><span class="rvts6">You can use "Import..." button to load cheats from an existing file (in case the file name does not match the ROM name, so it didn't load automatically). Alternatively, you can drag and drop any .cht file into the FCEUX window.</span></p>
<p class="rvps2"><span class="rvts6">You can also use "Export..." button to save cheats to another file.</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">There is also a right-click menu with the options Toggle selected Cheats, Poke Cheat Value and Goto in Hex Editor, and Delete selected Cheats.</span></p>
<p class="rvps2"><span class="rvts6">There is also a right-click menu with the options Toggle selected Cheats, Poke Cheat Value, Goto in Hex Editor and Delete selected Cheats.</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">Toggle Cheats is like Double Clicking, it enables or disables the cheat code. You can select many cheats in the list and toggle them all at once.</span></p>
<p class="rvps2"><span class="rvts6">Toggle Cheats is like check the checkmark on the left side of the cheat, it enables or disables the cheat code. You can select many cheats in the list and toggle them all at once.</span></p>
<p class="rvps2"><span class="rvts6">Poke Cheat Value is like turning the cheat on, but in this case there's no off switch. If the code is on when you use this, then when the code is turned off, it will revert to the value last used. Good for one time life refills, if you want that sort of thing.</span></p>
<p class="rvps2"><span class="rvts6">Goto in Hex Editor opens the Hex Editor window, and puts the cursor on the address shown. It's somewhat similar to how Bookmarks work in the Hex Editor.</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
@ -267,6 +268,7 @@
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">Any value in the possibilities list can be sent to memory watch by double clicking it. &nbsp;</span></p>
<p class="rvps2"><span class="rvts6">Highlighting it and hitting the "Add" button under the Active cheats window will automatically activate it as a cheat with the value set to its current value.</span></p>
<p class="rvps2"><span class="rvts6">When you activate a cheat, the item in </span><a class="rvts65" href="RAMSearch.html">RAM Search</a><span class="rvts6"> and </span><a class="rvts65" href="RAMWatch.html">RAM Watch</a><span class="rvts6"> which corresponding to that address will be marked with a significant color.</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts37">Example</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
@ -285,6 +287,8 @@
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts45">Goto In Hex Editor</span><span class="rvts6"> - Opens the </span><a class="rvts64" href="HexEditor.html">Hex editor</a><span class="rvts6"> dialog to the position of the selected RAM value.</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">Right-clicking in the search result list, you can add the address to memory watch, add cheat or goto in </span><a class="rvts64" href="HexEditor.html">Hex Editor</a><span class="rvts6">.</span></p>
<p></p>
<p class="rvps4" style="clear: both;"><span class="rvts18">Created with the Personal Edition of HelpNDoc: </span><a class="rvts19" href="https://www.helpndoc.com">Full-featured Documentation generator</a></p>

View File

@ -197,10 +197,10 @@
<p class="rvps2"><span class="rvts6">The Code/Data Logger keeps track of every byte in the ROM and records whether it's code (is executed) or data (is read).</span></p>
<p class="rvps2"><span class="rvts6">You can combine this logging feature with other tools to make them much more powerful:</span></p>
<ul style="text-indent: 0px; padding: 0; margin: 0 0 0 24px; list-style-position: outside; list-style-type: disc;">
<li class="rvps2"><span class="rvts6">combine with </span><a class="rvts89" href="Debugger.html">Debugger</a><span class="rvts6"> to see which branches of the game code were executed and which weren't yet</span></li>
<li class="rvps2"><span class="rvts6">combine with </span><a class="rvts89" href="TraceLogger.html">Trace Logger</a><span class="rvts6"> to let it log the code selectively</span></li>
<li class="rvps2"><span class="rvts6">combine with </span><a class="rvts89" href="PPUViewer.html">PPU Viewer</a><span class="rvts6"> to let it only display graphics that was drawn on screen at least once</span></li>
<li class="rvps2"><span class="rvts6">combine with </span><a class="rvts89" href="HexEditor.html">Hex Editor</a><span class="rvts6"> to enable smart coloring of bytes (so you can observe which bytes are used by the game and how/when they are used)</span></li>
<li class="rvps2"><span class="rvts6">combine with </span><a class="rvts90" href="Debugger.html">Debugger</a><span class="rvts6"> to see which branches of the game code were executed and which weren't yet</span></li>
<li class="rvps2"><span class="rvts6">combine with </span><a class="rvts90" href="TraceLogger.html">Trace Logger</a><span class="rvts6"> to let it log the code selectively</span></li>
<li class="rvps2"><span class="rvts6">combine with </span><a class="rvts90" href="PPUViewer.html">PPU Viewer</a><span class="rvts6"> to let it only display graphics that was drawn on screen at least once</span></li>
<li class="rvps2"><span class="rvts6">combine with </span><a class="rvts90" href="HexEditor.html">Hex Editor</a><span class="rvts6"> to enable smart coloring of bytes (so you can observe which bytes are used by the game and how/when they are used)</span></li>
<li class="rvps2"><span class="rvts6">combine with (an external) Tile Viewer to see which graphics was used during certain play session, and which was not</span></li>
<li class="rvps2"><span class="rvts6">combine with (an external) ROM Corruptor to make it only corrupt data, but not code</span></li>
<li class="rvps2"><span class="rvts6">combine with (an external) Disassembler to help it separate code from data</span></li>
@ -208,18 +208,18 @@
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">See, it is very useful for finding certain types of data or code branches. It also makes debugging work more visual, since you can always see which lines of the disassembled code were executed and which weren't.</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">Furthermore, while the Code/Data Logger is running, the </span><a class="rvts89" href="HexEditor.html">Hex Editor</a><span class="rvts6"> will color-code ROM bytes depending on whether they were logged as code or data:</span></p>
<p class="rvps2"><span class="rvts6">Furthermore, while the Code/Data Logger is running, the </span><a class="rvts90" href="HexEditor.html">Hex Editor</a><span class="rvts6"> will color-code ROM bytes depending on whether they were logged as code or data:</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">For PRG ROM:</span></p>
<p class="rvps2"><span class="rvts81">Dark-yellow</span><span class="rvts6"> - the byte is code</span></p>
<p class="rvps2"><span class="rvts82">Blue</span><span class="rvts6"> - the byte is data</span></p>
<p class="rvps2"><span class="rvts83">Cyan</span><span class="rvts6"> - the byte is PCM audio data</span></p>
<p class="rvps2"><span class="rvts80">Green</span><span class="rvts6"> - the byte is both code and data</span></p>
<p class="rvps2"><span class="rvts82">Dark-yellow</span><span class="rvts6"> - the byte is code</span></p>
<p class="rvps2"><span class="rvts83">Blue</span><span class="rvts6"> - the byte is data</span></p>
<p class="rvps2"><span class="rvts84">Cyan</span><span class="rvts6"> - the byte is PCM audio data</span></p>
<p class="rvps2"><span class="rvts81">Green</span><span class="rvts6"> - the byte is both code and data</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">For CHR ROM:</span></p>
<p class="rvps2"><span class="rvts84">Yellow</span><span class="rvts6"> - the byte was rendered</span></p>
<p class="rvps2"><span class="rvts85">Light-blue</span><span class="rvts6"> - the byte was read programmatically</span></p>
<p class="rvps2"><span class="rvts86">Light-green</span><span class="rvts6"> - the byte was both rendered and read programmatically</span></p>
<p class="rvps2"><span class="rvts85">Yellow</span><span class="rvts6"> - the byte was rendered</span></p>
<p class="rvps2"><span class="rvts86">Light-blue</span><span class="rvts6"> - the byte was read programmatically</span></p>
<p class="rvps2"><span class="rvts87">Light-green</span><span class="rvts6"> - the byte was both rendered and read programmatically</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">The Code/Data Logger can also be used to generate a stripped NES ROM.</span></p>
<p class="rvps2"><span class="rvts6">"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.</span></p>

View File

@ -332,7 +332,7 @@
<p class="rvps2"><span class="rvts6">BIT(n); -- returns a number with only bit n set (1)</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">The emulator specific Lua is equal to the one of snes9x, with some platform specific changes (few buttons, for instance).&nbsp;</span></p>
<p class="rvps2"><span class="rvts6">You can find the reference here: </span><a class="rvts93" href="http://dehacked.2y.net/snes9x-lua.html" target="_blank">http://dehacked.2y.net/snes9x-lua.html</a></p>
<p class="rvps2"><span class="rvts6">You can find the reference here: </span><a class="rvts96" href="http://dehacked.2y.net/snes9x-lua.html" target="_blank">http://dehacked.2y.net/snes9x-lua.html</a></p>
<p class="rvps2"><span class="rvts6">The following is a quick reference, you can go to the snes9x reference for more details.</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">To paint stuff on screen, use the gui table. This contains a few predefined functions to manipulate the main window. For any coordinate, 0,0 is the top-left pixel of the window. You have to prevent out-of-bound errors yourself for now. If a color can be passed on, it is a string. HTML-syntax is supported ("#34053D"), as well as a FEW colors ("red", "green", "blue" ...).</span></p>
@ -377,7 +377,7 @@
<p class="rvps2"><span class="rvts6">savestate.load(state); -- load the given savestate</span></p>
<p class="rvps2"><span class="rvts6">savestate.save(state); -- save the given savestate</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">For an up-to-date list of functions, see the </span><a class="rvts93" href="LuaFunctionsList.html">Lua Functions List</a><span class="rvts6">.</span></p>
<p class="rvps2"><span class="rvts6">For an up-to-date list of functions, see the </span><a class="rvts96" href="LuaFunctionsList.html">Lua Functions List</a><span class="rvts6">.</span></p>
<p></p>
<p class="rvps4" style="clear: both;"><span class="rvts18">Created with the Personal Edition of HelpNDoc: </span><a class="rvts19" href="https://www.helpauthoringsoftware.com">Benefits of a Help Authoring Tool</a></p>

View File

@ -173,7 +173,7 @@
<li><a href="General.html">General</a></li>
</ol>
<div class="nav-arrows">
<div class="btn-group btn-group-xs" role="group"><a class="btn btn-default" href="General.html" title="General" role="button"><span class="glyphicon glyphicon-menu-up" aria-hidden="true"></span></a><a class="btn btn-default" href="CommandLineOptions.html" title="Command Line Options" role="button"><span class="glyphicon glyphicon-menu-left" aria-hidden="true"></span></a><a class="btn btn-default" href="FamicomDiskSytem.html" title="Famicom Disk System" role="button"><span class="glyphicon glyphicon-menu-right" aria-hidden="true"></span></a></div>
<div class="btn-group btn-group-xs" role="group"><a class="btn btn-default" href="General.html" title="General" role="button"><span class="glyphicon glyphicon-menu-up" aria-hidden="true"></span></a><a class="btn btn-default" href="CommandLineOptions.html" title="Command Line Options" role="button"><span class="glyphicon glyphicon-menu-left" aria-hidden="true"></span></a><a class="btn btn-default" href="FamicomDiskSystem.html" title="Famicom Disk System" role="button"><span class="glyphicon glyphicon-menu-right" aria-hidden="true"></span></a></div>
</div>
</div>

View File

@ -226,26 +226,26 @@
<table width="100%" border="1" cellpadding="6" cellspacing="2" style="border-color: #000000; border-style: solid; border-spacing: 2px;">
<tr valign="top">
<td width="305" height="46" style="border-color: #000000; border-style: solid; padding: 6px;">
<p class="rvps2"><span class="rvts73">HINT: When entering the address manually, these convenient strings may be used instead of the hexadecimal memory address:</span></p>
<p class="rvps2"><span class="rvts73">NES special addresses:</span></p>
<p class="rvps2"><span class="rvts74">HINT: When entering the address manually, these convenient strings may be used instead of the hexadecimal memory address:</span></p>
<p class="rvps2"><span class="rvts74">NES special addresses:</span></p>
<ul style="text-indent: 0px; padding: 0; margin: 0 0 0 24px; list-style-position: outside; list-style-type: disc;">
<li class="rvps2"><span class="rvts73">NMI/VBL - non-maskable interrupt vector (at FFFA)</span></li>
<li class="rvps2"><span class="rvts73">RST &nbsp; &nbsp; - reset vector (at FFFC)</span></li>
<li class="rvps2"><span class="rvts73">IRQ &nbsp; &nbsp; - interrupt vector (at FFFE)</span></li>
<li class="rvps2"><span class="rvts74">NMI/VBL - non-maskable interrupt vector (at FFFA)</span></li>
<li class="rvps2"><span class="rvts74">RST &nbsp; &nbsp; - reset vector (at FFFC)</span></li>
<li class="rvps2"><span class="rvts74">IRQ &nbsp; &nbsp; - interrupt vector (at FFFE)</span></li>
</ul>
<p class="rvps2"><span class="rvts73">FDS special addresses:</span></p>
<p class="rvps2"><span class="rvts74">FDS special addresses:</span></p>
<ul style="text-indent: 0px; padding: 0; margin: 0 0 0 24px; list-style-position: outside; list-style-type: disc;">
<li class="rvps2"><span class="rvts73">NMI1 - non-maskable interrupt vector (at DFF6)</span></li>
<li class="rvps2"><span class="rvts73">NMI2 - non-maskable interrupt vector (at DFF8)</span></li>
<li class="rvps2"><span class="rvts73">NMI3 - non-maskable interrupt vector (at DFFA)</span></li>
<li class="rvps2"><span class="rvts73">RST &nbsp;- reset vector (at DFFC)</span></li>
<li class="rvps2"><span class="rvts73">IRQ &nbsp;- interrupt vector (at DFFE)</span></li>
<li class="rvps2"><span class="rvts74">NMI1 - non-maskable interrupt vector (at DFF6)</span></li>
<li class="rvps2"><span class="rvts74">NMI2 - non-maskable interrupt vector (at DFF8)</span></li>
<li class="rvps2"><span class="rvts74">NMI3 - non-maskable interrupt vector (at DFFA)</span></li>
<li class="rvps2"><span class="rvts74">RST &nbsp;- reset vector (at DFFC)</span></li>
<li class="rvps2"><span class="rvts74">IRQ &nbsp;- interrupt vector (at DFFE)</span></li>
</ul>
<p class="rvps2"><span class="rvts73">NSF special addresses:</span></p>
<p class="rvps2"><span class="rvts74">NSF special addresses:</span></p>
<ul style="text-indent: 0px; padding: 0; margin: 0 0 0 24px; list-style-position: outside; list-style-type: disc;">
<li class="rvps2"><span class="rvts73">LOAD - NSF LOAD address</span></li>
<li class="rvps2"><span class="rvts73">INIT - NSF INIT address</span></li>
<li class="rvps2"><span class="rvts73">PLAY - NSF PLAY address</span></li>
<li class="rvps2"><span class="rvts74">LOAD - NSF LOAD address</span></li>
<li class="rvps2"><span class="rvts74">INIT - NSF INIT address</span></li>
<li class="rvps2"><span class="rvts74">PLAY - NSF PLAY address</span></li>
</ul>
</td>
</tr>
@ -258,7 +258,7 @@
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">The current PPU memory address, sprite memory address, scanline, and rendering pixel are displayed below the stack and status flags. </span><span class="rvts20">Examples of Scanline number:</span><span class="rvts6"> -1 means Prerender time, 240 is Idle scanline, 0-239 are visible scanlines, 241-260/310 are VBlank scanlines.</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">To the right from the PPU section there's Cycles counter and Instructions counter that keep counting while the game is running. You can use the information for keeping statistics, for code profiling or writing PPU-synchronized code (e.g. raster effects). You can also make the debugger break automatically based on the counters values. The "Reset counters" button resets both counters to 0. You can also access the counters via </span><a class="rvts71" href="LuaFunctionsList.html">Lua</a><span class="rvts6">.</span></p>
<p class="rvps2"><span class="rvts6">To the right from the PPU section there's Cycles counter and Instructions counter that keep counting while the game is running. You can use the information for keeping statistics, for code profiling or writing PPU-synchronized code (e.g. raster effects). You can also make the debugger break automatically based on the counters values. The "Reset counters" button resets both counters to 0. You can also access the counters via </span><a class="rvts72" href="LuaFunctionsList.html">Lua</a><span class="rvts6">.</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts17">Disassembly</span></p>
@ -273,8 +273,8 @@
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">Memory contents are displayed in this form:</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts72">0F:C0A8:24 1F &nbsp; &nbsp; BIT $001F = #$80</span></p>
<p class="rvps2"><span class="rvts72">bb:mmmm:dd dd dd &nbsp;iiiiiiiiiiiii...</span></p>
<p class="rvps2"><span class="rvts73">0F:C0A8:24 1F &nbsp; &nbsp; BIT $001F = #$80</span></p>
<p class="rvps2"><span class="rvts73">bb:mmmm:dd dd dd &nbsp;iiiiiiiiiiiii...</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<ul style="text-indent: 0px; padding: 0; margin: 0 0 0 24px; list-style-position: outside; list-style-type: disc;">
<li class="rvps2"><span class="rvts6">bb - 16k iNES bank, designates which 16k bank from the iNES file is mapped here. Note that the number may be not the same as the actual hardware bank of the mapper.</span></li>
@ -289,8 +289,8 @@
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">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.</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">There is narrow column to the left of the Disassembly window. Left clicking on this column will open the </span><span class="rvts45">Inline Assembler</span><span class="rvts6">, which allows you to patch the ROM at runtime. Right clicking on this column will open the </span><a class="rvts71" href="HexEditor.html">Hex Editor</a><span class="rvts6">, which allows you to directly edit the ROM. Middle-clicking on this column will bring up the </span><a class="rvts71" href="GameGenieEncoderDecoder.html">Game Genie Encoder</a><span class="rvts6"> at that address, so you can easily make Game Genie codes.</span></p>
<p class="rvps2"><span class="rvts6">Also, when </span><a class="rvts71" href="CodeDataLogger.html">Code/Data Logger</a><span class="rvts6"> 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 (empty space). This way you can easily distinguish which branches of the game code were executed and which weren't.</span></p>
<p class="rvps2"><span class="rvts6">There is narrow column to the left of the Disassembly window. Left clicking on this column will open the </span><span class="rvts45">Inline Assembler</span><span class="rvts6">, which allows you to patch the ROM at runtime. Right clicking on this column will open the </span><a class="rvts72" href="HexEditor.html">Hex Editor</a><span class="rvts6">, which allows you to directly edit the ROM. Middle-clicking on this column will bring up the </span><a class="rvts72" href="GameGenieEncoderDecoder.html">Game Genie Encoder</a><span class="rvts6"> at that address, so you can easily make Game Genie codes.</span></p>
<p class="rvps2"><span class="rvts6">Also, when </span><a class="rvts72" href="CodeDataLogger.html">Code/Data Logger</a><span class="rvts6"> 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 (empty space). This way you can easily distinguish which branches of the game code were executed and which weren't.</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts17">Symbolic Debugging</span></p>
@ -308,7 +308,7 @@
<p class="rvps2"><span class="rvts6">To delete a label, check the "Delete" checkbox and click OK.</span></p>
<p class="rvps2"><span class="rvts6">The array size specified in delete mode indicates labels of how many bytes will be deleted. If you select $C000 and set array size to 0xF, all the labels form $C000 to $C00E are deleted.&nbsp;</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">The data for Symbolic Debugging is stored in </span><a class="rvts71" href="NLFilesFormat.html">NL files</a><span class="rvts6"> in the same folder as the ROM. You can edit the files in any text editor (to reload all NL files of the currently active ROM file press the "Reload Symbols" button), but it's more convenient to use right-clicks.</span></p>
<p class="rvps2"><span class="rvts6">The data for Symbolic Debugging is stored in </span><a class="rvts72" href="NLFilesFormat.html">NL files</a><span class="rvts6"> in the same folder as the ROM. You can edit the files in any text editor (to reload all NL files of the currently active ROM file press the "Reload Symbols" button), but it's more convenient to use right-clicks.</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">You can enable and disable symbolic debugging by clicking the checkbox "Symbolic debug" in the lower right corner. In general, there's no need to disable this feature. If you need to see the actual address which got substituted by a name, you can simply left-click the name and watch its address in the "Seek To" text field. This also works when clicking a name in the Trace Logger window.</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
@ -331,13 +331,13 @@
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">Finally, you can make the debugger break after executing a certain number of instructions or CPU cycles.</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">More advanced breakpoints conditions and full automation may be achieved through Lua script breakpoints. See the </span><a class="rvts71" href="LuaFunctionsList.html#LuaBreakpoints">Lua reference</a><span class="rvts6"> for more information.</span></p>
<p class="rvps2"><span class="rvts6">More advanced breakpoints conditions and full automation may be achieved through Lua script breakpoints. See the </span><a class="rvts72" href="LuaFunctionsList.html#LuaBreakpoints">Lua reference</a><span class="rvts6"> for more information.</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">Breakpoints are listed in the following form:</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts72">aaaa EmRWXF nnnn cccc</span></p>
<p class="rvps2"><span class="rvts72">or</span></p>
<p class="rvps2"><span class="rvts72">aaaa-aaaa EmRWXF nnnn cccc</span></p>
<p class="rvps2"><span class="rvts73">aaaa EmRWXF nnnn cccc</span></p>
<p class="rvps2"><span class="rvts73">or</span></p>
<p class="rvps2"><span class="rvts73">aaaa-aaaa EmRWXF nnnn cccc</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<ul style="text-indent: 0px; padding: 0; margin: 0 0 0 24px; list-style-position: outside; list-style-type: disc;">
<li class="rvps2"><span class="rvts6">aaaa - address of breakpoint</span></li>
@ -365,10 +365,10 @@
<li class="rvps2"><span class="rvts6">Number &nbsp; &nbsp;-&gt; '#' [0123456789ABCDEF]*</span></li>
<li class="rvps2"><span class="rvts6">Address &nbsp; -&gt; '$' [0123456789ABCDEF]* | '$' '[' Connect ']'</span></li>
<li class="rvps2"><span class="rvts6">Register &nbsp;-&gt; 'A' | 'X' | 'Y' | 'P'</span></li>
<li class="rvps2"><span class="rvts6">Flag &nbsp; &nbsp; &nbsp;-&gt; 'N' | 'C' | 'Z' | 'I' | 'B' | 'V' </span><span class="rvts74">| 'D' | 'U'</span></li>
<li class="rvps2"><span class="rvts6">Flag &nbsp; &nbsp; &nbsp;-&gt; 'N' | 'C' | 'Z' | 'I' | 'B' | 'V' </span><span class="rvts75">| 'D' | 'U'</span></li>
<li class="rvps2"><span class="rvts6">PC Bank &nbsp; -&gt; 'K'</span></li>
<li class="rvps2"><span class="rvts6">Data Bank &nbsp; -&gt; 'T'</span></li>
<li class="rvps2"><span class="rvts74">Read/Write Value</span><span class="rvts6"> &nbsp; -&gt; </span><span class="rvts74">'R' | 'W'</span></li>
<li class="rvps2"><span class="rvts75">Read/Write Value</span><span class="rvts6"> &nbsp; -&gt; </span><span class="rvts75">'R' | 'W'</span></li>
</ul>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">The parser is very strict. All numbers are hexadecimal. Always prefix a number with # for an immediate value, or $ for a memory address. If a memory address needs to be calculated use $[] with the calculation inside the brackets.</span></p>
@ -382,16 +382,16 @@
<p class="rvps2"><span class="rvts20">Example conditions:</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">Break only if register A is less than value at memory address $0005:</span></p>
<p class="rvps2"><span class="rvts72">A &lt; $0005</span></p>
<p class="rvps2"><span class="rvts73">A &lt; $0005</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">Break only if the value at the indirect address is not equal to FF:</span></p>
<p class="rvps2"><span class="rvts72">#FF != $[$10+($11*#100)]</span></p>
<p class="rvps2"><span class="rvts73">#FF != $[$10+($11*#100)]</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">Break only if flag N is clear or A is not equal to 00:</span></p>
<p class="rvps2"><span class="rvts72">(N==#0 || A!=#0)</span></p>
<p class="rvps2"><span class="rvts73">(N==#0 || A!=#0)</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">Break only when accessing a data from bank 2 (the condiition is relevant when using with Read/Write-type breakpoints):</span></p>
<p class="rvps2"><span class="rvts72">T==#2</span></p>
<p class="rvps2"><span class="rvts73">T==#2</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts17">Bookmarks</span></p>
@ -415,7 +415,7 @@
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">If the ".DEB files" checkbox in the lower right corner of the debugger window is checked, the emulator will automatically save debug settings such as breakpoints and bookmarks in a .deb file alongside the NES ROM, and load these settings next time you open the ROM.</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">There is a "Rom Patcher" button that may be used to apply a small patch to a ROM, although </span><a class="rvts71" href="HexEditor.html">Hex Editor</a><span class="rvts6"> is more convenient in general.</span></p>
<p class="rvps2"><span class="rvts6">There is a "Rom Patcher" button that may be used to apply a small patch to a ROM, although </span><a class="rvts72" href="HexEditor.html">Hex Editor</a><span class="rvts6"> is more convenient in general.</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">The "ROM offsets" option will display ROM offsets instead of CPU addresses in the Disassembly window.</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>

View File

@ -1,111 +1,302 @@
<html>
<!DOCTYPE html>
<html lang="en">
<head>
<title>Famicom Disk System</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="HelpNDoc Personal Edition 3.8.0.560">
<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("FamicomDiskSystem");
}
});
</script>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="generator" content="HelpNDoc Personal Edition 7.0.0.199">
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="icon" href="favicon.ico"/>
<title>Famicom Disk System</title>
<meta name="description" content="" />
<meta name="keywords" content="Famicom Disk System">
<!-- Twitter Card data -->
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="Famicom Disk System">
<meta name="twitter:description" content="">
<!-- Open Graph data -->
<meta property="og:title" content="Famicom Disk System" />
<meta property="og:type" content="article" />
<meta property="og:description" content="" />
<meta property="og:site_name" content="FCEUX Help" />
<!-- Bootstrap core CSS -->
<link href="vendors/bootstrap-3.4.1/css/bootstrap.min.css" rel="stylesheet"/>
<!-- IE10 viewport hack for Surface/desktop Windows 8 bug -->
<link href="vendors/bootstrap-3.4.1/css/ie10-viewport-bug-workaround.css" rel="stylesheet"/>
<!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
<!--[if lt IE 9]>
<script src="vendors/html5shiv-3.7.3/html5shiv.min.js"></script>
<script src="vendors/respond-1.4.2/respond.min.js"></script>
<![endif]-->
<!-- JsTree styles -->
<link href="vendors/jstree-3.3.10/themes/default/style.min.css" rel="stylesheet"/>
<!-- Hnd styles -->
<link href="css/layout.min.css" rel="stylesheet" />
<link href="css/effects.min.css" rel="stylesheet" />
<link href="css/theme-light-blue.min.css" rel="stylesheet" />
<link href="css/print.min.css" rel="stylesheet" media="print" />
<style type="text/css">nav { width: 250px} @media screen and (min-width:769px) { body.md-nav-expanded div#main { margin-left: 250px} body.md-nav-expanded header { padding-left: 264px} }</style>
<!-- Content style -->
<link href="css/hnd.content.css" rel="stylesheet" />
</head>
<body>
<body class="md-nav-expanded">
<div id="topic_header">
<div id="topic_header_content">
<h1>Famicom Disk System</h1>
<div id="topic_breadcrumb">
<a href="General.html">General</a> &rsaquo;&rsaquo; </div>
</div>
<div id="topic_header_nav">
<a href="General.html"><img src="img/arrow_up.png" alt="Parent"/></a>
<a href="CustomizingthroughtheConfigFil.html"><img src="img/arrow_left.png" alt="Previous"/></a>
<a href="AVICapturing.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">Famicom Disk System</span></p>
<p><br/></p>
<p>The Family Computer Disk System (FDS) was released in 1986 by Nintendo as a peripheral for the Family Computer ("Famicom") console in Japan. It was a unit that used proprietary floppy disks for data storage. It was announced, but never released, for the North American Nintendo Entertainment System.</p>
<p><br/></p>
<p>The device was connected to the Famicom deck by plugging a modified cartridge known as the RAM Adapter into the system's cartridge port, which attached via a supplied cable to the disk drive. </p>
<p><br/></p>
<p>The floppy disks used were double-sided, with a capacity of 64 kilobytes per side. Many games spanned both sides of a disk, requiring the user to switch sides at some point during gameplay. A few games used two full disks (four sides). The Famicom Disk System was capable of running on six C-cell batteries or the supplied AC adapter. The battery option was included due to the likelihood of a standard set of AC sockets already being occupied by a Famicom and a television.</p>
<p><br/></p>
<p><span class="rvts16">FDS BIOS ROM</span></p>
<p><br/></p>
<p>In order to play any Famicom (.fds) game, you will need the FDS BIOS ROM image and it must be named disksys.rom.</p>
<p>It must be in the base FCEU directory unless you specified a path to disksys.rom in the <a class="rvts18" href="Directories.html">Directory Overrides List</a>. FCEUX will not load FDS games without this file.</p>
<p><br/></p>
<p><span class="rvts16">File types</span></p>
<p><br/></p>
<p>Two types of FDS disk images are supported: disk images with the FWNES-style header, and disk images with no header. The number of sides on headerless disk images is calculated by the total file size, so don't put extraneous data at the end of the file.</p>
<p><br/></p>
<p><span class="rvts16">Writing to disk image</span></p>
<p><br/></p>
<p>If a loaded disk image is written to during emulation, FCEUX will store the modified disk image in the save games directory, which is "sav" under the base directory by default (unless changed under the <a class="rvts18" href="Directories.html">Directory Overrides List</a>).</p>
<p><br/></p>
<p><span class="rvts16">Eject/Insert Disk</span></p>
<p><br/></p>
<p>Emulates the ejecting of the current disk or the inserting of a new disk. &nbsp;If a disk image is loaded, this command will eject it. &nbsp;If a disk is ejected, this will insert a new disk.</p>
<p>This command can be mapped to a keyboard/joypad button in the <a class="rvts18" href="MapHotkeys.html">Map Hotkeys Menu</a>.</p>
<p><br/></p>
<p><br/></p>
<p><span class="rvts16">Switch Disk Side</span></p>
<p><br/></p>
<p>When prompted by the game, you can emulate the Switching sides of the FDS disk with the NES -&gt; Switch Disk Side command.</p>
<p>This command can be mapped to a keyboard/joypad button in the <a class="rvts18" href="MapHotkeys.html">Map Hotkeys Menu</a>.</p>
<p><br/></p>
<p>To switch disk side you first have to eject the disk, and after switching sides you have to insert the disk back.</p>
<p>Many FDS games ask you to switch disk side before you can proceed from the title screen. So you have to do the following:</p>
<p>1) choose <span class="rvts32">NES -&gt; Eject/Insert Disk</span>, the message "Disk 0 Side A Ejected" will appear</p>
<p>2) choose <span class="rvts32">NES -&gt; Switch Disk Side</span>, the message "Disk 0 Side B Selected" will appear</p>
<p>3) choose <span class="rvts32">NES -&gt; Eject/Insert Disk</span> again, the message "Disk 0 Side B Inserted" will appear, and the game will change from title screen to player select screen.</p>
<p><br/></p>
<p><br/></p>
<p><br/></p>
<p></p>
<p class="rvps2"><span class="rvts13">Created with the Personal Edition of HelpNDoc: </span><a class="rvts14" href="http://www.helpndoc.com">Free CHM Help documentation generator</a></p>
</div>
<div id="topic_footer">
<div id="topic_footer_content">
2016</div>
</div>
</body>
<div id="skip-link">
<a href="#main-content" class="element-invisible">Skip to main content</a>
</div>
<header class="headroom">
<button class="hnd-toggle btn btn-default">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span><span class="icon-bar"></span><span class="icon-bar"></span>
</button>
<h1>FCEUX Help</h1>
</header>
<nav id="panel-left" class="md-nav-expanded">
<!-- Nav tabs -->
<ul class="tab-tabs nav nav-tabs" role="tablist">
<li id="nav-close">
<button class="hnd-toggle btn btn-default">
<span class="glyphicon glyphicon-remove" aria-hidden="true"></span>
</button>
</li>
<li role="presentation" class="tab active">
<a href="#contents" id="tab-contents" aria-controls="contents" role="tab" data-toggle="tab">
<i class="glyphicon glyphicon-list"></i>
Contents
</a>
</li>
<li role="presentation" class="tab">
<a href="#index" id="tab-index" aria-controls="index" role="tab" data-toggle="tab">
<i class="glyphicon glyphicon-asterisk"></i>
Index
</a>
</li>
<li role="presentation" class="tab">
<a href="#search" id="tab-search" aria-controls="search" role="tab" data-toggle="tab">
<i class="glyphicon glyphicon-search"></i>
Search
</a>
</li>
</ul> <!-- /Nav tabs -->
<!-- Tab panes -->
<div class="tab-content">
<div role="tabpanel" class="tab-pane active" id="contents">
<div id="toc" class="tree-container unselectable"
data-url="_toc.json"
data-openlvl="1"
>
</div>
</div> <!-- /contents-->
<div role="tabpanel" class="tab-pane" id="index">
<div id="keywords" class="tree-container unselectable"
data-url="_keywords.json"
data-openlvl="1"
>
</div>
</div> <!-- /index-->
<div role="tabpanel" class="tab-pane" id="search">
<div class="search-content">
<div class="search-input">
<form id="search-form">
<div class="form-group">
<div class="input-group">
<input type="text" class="form-control" id="input-search" name="input-search" placeholder="Search..." />
<span class="input-group-btn">
<button class="btn btn-default" type="submit">
<span class="glyphicon glyphicon-search" aria-hidden="true"></span>
</button>
</span>
</div>
</div>
</form>
</div> <!-- /search-input -->
<div class="search-result">
<div id="search-info"></div>
<div class="tree-container unselectable" id="search-tree"></div>
</div> <!-- /search-result -->
</div> <!-- /search-content -->
</div> <!-- /search-->
</div> <!-- /Tab panes -->
</nav>
<div id="main">
<article>
<div id="topic-content" class="container-fluid"
data-hnd-id="FamicomDiskSystem"
data-hnd-context="7"
data-hnd-title="Famicom Disk System"
>
<div class="navigation">
<ol class="breadcrumb">
<li><a href="General.html">General</a></li>
</ol>
<div class="nav-arrows">
<div class="btn-group btn-group-xs" role="group"><a class="btn btn-default" href="General.html" title="General" role="button"><span class="glyphicon glyphicon-menu-up" aria-hidden="true"></span></a><a class="btn btn-default" href="CustomizingthroughtheConfigFil.html" title="Customizing through the Config File" role="button"><span class="glyphicon glyphicon-menu-left" aria-hidden="true"></span></a><a class="btn btn-default" href="AVICapturing.html" title="AVI Capturing" role="button"><span class="glyphicon glyphicon-menu-right" aria-hidden="true"></span></a></div>
</div>
</div>
<a id="main-content"></a>
<h2>Famicom Disk System</h2>
<div class="main-content">
<p></p>
<p class="rvps2"><span class="rvts22">Famicom Disk System</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">The Family Computer Disk System (FDS) was released in 1986 by Nintendo as a peripheral for the Family Computer ("Famicom") console in Japan. It was a unit that used proprietary floppy disks for data storage. It was announced, but never released, for the North American Nintendo Entertainment System.</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">The device was connected to the Famicom deck by plugging a modified cartridge known as the RAM Adapter into the system's cartridge port, which attached via a supplied cable to the disk drive.&nbsp;</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">The floppy disks used were double-sided, with a capacity of 64 kilobytes per side. Many games spanned both sides of a disk, requiring the user to switch sides at some point during gameplay. A few games used two full disks (four sides). The Famicom Disk System was capable of running on six C-cell batteries or the supplied AC adapter. The battery option was included due to the likelihood of a standard set of AC sockets already being occupied by a Famicom and a television.</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts21">FDS BIOS ROM</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">In order to play any Famicom (.fds) game, you will need the FDS BIOS ROM image and it must be named disksys.rom.</span></p>
<p class="rvps2"><span class="rvts6">It must be in the base FCEU directory unless you specified a path to disksys.rom in the </span><a class="rvts44" href="Directories.html">Directory Overrides List</a><span class="rvts6">. FCEUX will not load FDS games without this file.</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts21">File types</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">Two types of FDS disk images are supported: disk images with the FWNES-style header, and disk images with no header. The number of sides on headerless disk images is calculated by the total file size, so don't put extraneous data at the end of the file.</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts21">Writing to disk image</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">If a loaded disk image is written to during emulation, FCEUX will store the modified disk image in the save games directory, which is "sav" under the base directory by default (unless changed under the </span><a class="rvts44" href="Directories.html">Directory Overrides List</a><span class="rvts6">).</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts21">Eject/Insert Disk</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">Emulates the ejecting of the current disk or the inserting of a new disk. &nbsp;If a disk image is loaded, this command will eject it. &nbsp;If a disk is ejected, this will insert a new disk.</span></p>
<p class="rvps2"><span class="rvts6">This command can be mapped to a keyboard/joypad button in the </span><a class="rvts44" href="MapHotkeys.html">Map Hotkeys Menu</a><span class="rvts6">.</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts21">Switch Disk Side</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">When prompted by the game, you can emulate the Switching sides of the FDS disk with the NES -&gt; Switch Disk Side command.</span></p>
<p class="rvps2"><span class="rvts6">This command can be mapped to a keyboard/joypad button in the </span><a class="rvts44" href="MapHotkeys.html">Map Hotkeys Menu</a><span class="rvts6">.</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">To switch disk side you first have to eject the disk, and after switching sides you have to insert the disk back.</span></p>
<p class="rvps2"><span class="rvts6">Many FDS games ask you to switch disk side before you can proceed from the title screen. So you have to do the following:</span></p>
<p class="rvps2"><span class="rvts6">1) choose </span><span class="rvts45">NES -&gt; Eject/Insert Disk</span><span class="rvts6">, the message "Disk 0 Side A Ejected" will appear</span></p>
<p class="rvps2"><span class="rvts6">2) choose </span><span class="rvts45">NES -&gt; Switch Disk Side</span><span class="rvts6">, the message "Disk 0 Side B Selected" will appear</span></p>
<p class="rvps2"><span class="rvts6">3) choose </span><span class="rvts45">NES -&gt; Eject/Insert Disk</span><span class="rvts6"> again, the message "Disk 0 Side B Inserted" will appear, and the game will change from title screen to player select screen.</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p></p>
<p class="rvps4" style="clear: both;"><span class="rvts18">Created with the Personal Edition of HelpNDoc: </span><a class="rvts19" href="https://www.helpndoc.com/feature-tour/create-help-files-for-the-qt-help-framework">Create help files for the Qt Help Framework</a></p>
</div>
<div id="topic_footer"><div id="topic_footer_content">2020</div></div>
</div> <!-- /#topic-content -->
</article>
<footer></footer>
</div> <!-- /#main -->
<div class="mask" data-toggle="sm-nav-expanded"></div>
<!-- Modal -->
<div class="modal fade" id="hndModal" tabindex="-1" role="dialog" aria-labelledby="hndModalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
<h4 class="modal-title" id="hndModalLabel"></h4>
</div>
<div class="modal-body">
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary modal-btn-close" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
<!-- Splitter -->
<div id="hnd-splitter" style="left: 250px"></div>
<!-- Scripts -->
<script src="vendors/jquery-3.5.1/jquery.min.js"></script>
<script src="vendors/bootstrap-3.4.1/js/bootstrap.min.js"></script>
<script src="vendors/bootstrap-3.4.1/js/ie10-viewport-bug-workaround.js"></script>
<script src="vendors/markjs-8.11.1/jquery.mark.min.js"></script>
<script src="vendors/uri-1.19.2/uri.min.js"></script>
<script src="vendors/imageMapResizer-1.0.10/imageMapResizer.min.js"></script>
<script src="vendors/headroom-0.11.0/headroom.min.js"></script>
<script src="vendors/jstree-3.3.10/jstree.min.js"></script>
<script src="vendors/interactjs-1.9.22/interact.min.js"></script>
<!-- HelpNDoc scripts -->
<script src="js/polyfill.object.min.js"></script>
<script src="_translations.js"></script>
<script src="js/hndsd.min.js"></script>
<script src="js/hndse.min.js"></script>
<script src="js/app.min.js"></script>
<!-- Init script -->
<script>
$(function() {
// Create the app
var app = new Hnd.App();
// Update translations
hnd_ut(app);
// Instanciate imageMapResizer
imageMapResize();
// Custom JS
// Boot the app
app.Boot();
});
</script>
</body>
</html>

View File

@ -173,7 +173,7 @@
<li><a href="Debug.html">Debug</a></li>
</ol>
<div class="nav-arrows">
<div class="btn-group btn-group-xs" role="group"><a class="btn btn-default" href="Debug.html" title="Debug" role="button"><span class="glyphicon glyphicon-menu-up" aria-hidden="true"></span></a><a class="btn btn-default" href="CodeDataLogger.html" title="Code/Data Logger" role="button"><span class="glyphicon glyphicon-menu-left" aria-hidden="true"></span></a><a class="btn btn-default" href="LuaScripting.html" title="Lua Scripting" role="button"><span class="glyphicon glyphicon-menu-right" aria-hidden="true"></span></a></div>
<div class="btn-group btn-group-xs" role="group"><a class="btn btn-default" href="Debug.html" title="Debug" role="button"><span class="glyphicon glyphicon-menu-up" aria-hidden="true"></span></a><a class="btn btn-default" href="CodeDataLogger.html" title="Code/Data Logger" role="button"><span class="glyphicon glyphicon-menu-left" aria-hidden="true"></span></a><a class="btn btn-default" href="InesHeaderEditor.html" title="iNES Header Editor" role="button"><span class="glyphicon glyphicon-menu-right" aria-hidden="true"></span></a></div>
</div>
</div>
@ -195,7 +195,7 @@
<p class="rvps2"><span class="rvts21"><br/></span></p>
<p class="rvps2"><span class="rvts21">Adding Game Genie codes</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">In the Game Genie Code Decoder/Encoder window, type the code into the Game Genie Code box and click "Add to Cheat List", which will add it to the </span><a class="rvts90" href="CheatSearch.html">Cheat Search</a><span class="rvts6"> cheat list. You can then enable/disable them by double-clicking the code in the box (a * means the code is active).</span></p>
<p class="rvps2"><span class="rvts6">In the Game Genie Code Decoder/Encoder window, type the code into the Game Genie Code box and click "Add to Cheat List", which will add it to the </span><a class="rvts91" href="CheatSearch.html">Cheat Search</a><span class="rvts6"> cheat list. You can then enable/disable them by double-clicking the code in the box (a * means the code is active).</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts21">Making Game Genie codes permanent</span></p>
@ -211,7 +211,7 @@
<p class="rvps2"><span class="rvts6">* know how to use the debugger;</span></p>
<p class="rvps2"><span class="rvts6">* understand NES PRG-ROM bank switching.</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">Once you've found a part of PRG-ROM you want to change to create a code effect, snap the </span><a class="rvts90" href="Debugger.html">Debugger</a><span class="rvts6"> (if it's not so already) and find the code's location in the PRG-ROM's address space ($8000-$FFFF) (you'll want the debugger snapped so the game won't swap banks out from under you). Then, using the built-in </span><a class="rvts90" href="HexEditor.html">Hex Editor</a><span class="rvts6">, view the NES memory and go to the PRG-ROM address you wish to modify, then right-click the byte and choose "Create Game Genie Code at this Address". The Game Genie Code Decoder/Encoder will appear, with the Address and Compare boxes filled in (the Compare box represents the address's original value). Enter the new value into the "Value" box.&nbsp;</span></p>
<p class="rvps2"><span class="rvts6">Once you've found a part of PRG-ROM you want to change to create a code effect, snap the </span><a class="rvts91" href="Debugger.html">Debugger</a><span class="rvts6"> (if it's not so already) and find the code's location in the PRG-ROM's address space ($8000-$FFFF) (you'll want the debugger snapped so the game won't swap banks out from under you). Then, using the built-in </span><a class="rvts91" href="HexEditor.html">Hex Editor</a><span class="rvts6">, view the NES memory and go to the PRG-ROM address you wish to modify, then right-click the byte and choose "Create Game Genie Code at this Address". The Game Genie Code Decoder/Encoder will appear, with the Address and Compare boxes filled in (the Compare box represents the address's original value). Enter the new value into the "Value" box.&nbsp;</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">An alternative way to enter the code is to locate the desired address in the debugger, and then middle-click on it, which will summon the GG Code Decoder/Encoder. Then enter the code as described above.</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>

View File

@ -199,7 +199,7 @@
<p class="rvps2"><span class="rvts6">FCEUX as an extensive set of options for running from command line (or .bat file). &nbsp;This guide explains all command options available.</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><a class="rvts16" href="FamicomDiskSytem.html">Famicom Disk System</a></p>
<p class="rvps2"><a class="rvts16" href="FamicomDiskSystem.html">Famicom Disk System</a></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">A guide for playing Famicom Disk System (.fds) games.</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>

View File

@ -199,7 +199,7 @@
<p class="rvps2"><span class="rvts6">The Hex Editor lets you edit three major areas:</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts45">1. NES MEMORY</span></p>
<p class="rvps2"><span class="rvts6">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 </span><a class="rvts76" href="CheatSearch.html">Cheat Console</a><span class="rvts6">. 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.</span></p>
<p class="rvps2"><span class="rvts6">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 </span><a class="rvts77" href="CheatSearch.html">Cheat Console</a><span class="rvts6">. 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.</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts45">2. PPU MEMORY</span></p>
<p class="rvps2"><span class="rvts6">This allows you to directly view and write to PPU memory (VRAM).</span></p>
@ -222,19 +222,19 @@
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">The Hex Editor highlights certain bytes with different colors to help you distinguish different data.</span></p>
<p class="rvps2"><span class="rvts6">Usually all bytes are colored black.</span></p>
<p class="rvps2"><span class="rvts6">Bookmarked RAM addresses are highlighted by </span><span class="rvts78">green color</span><span class="rvts6">.</span></p>
<p class="rvps2"><span class="rvts6">Freezed RAM addresses are highlighted by </span><span class="rvts77">blue color</span><span class="rvts6">.</span></p>
<p class="rvps2"><span class="rvts6">Modified ROM bytes are highlighted by </span><span class="rvts79">red color</span><span class="rvts6">.</span></p>
<p class="rvps2"><span class="rvts6">If you have the </span><a class="rvts76" href="CodeDataLogger.html">Code/Data Logger</a><span class="rvts6"> running, bytes that were logged will be colored:</span></p>
<p class="rvps2"><span class="rvts6">Bookmarked RAM addresses are highlighted by </span><span class="rvts79">green color</span><span class="rvts6">.</span></p>
<p class="rvps2"><span class="rvts6">Freezed RAM addresses are highlighted by </span><span class="rvts78">blue color</span><span class="rvts6">.</span></p>
<p class="rvps2"><span class="rvts6">Modified ROM bytes are highlighted by </span><span class="rvts80">red color</span><span class="rvts6">.</span></p>
<p class="rvps2"><span class="rvts6">If you have the </span><a class="rvts77" href="CodeDataLogger.html">Code/Data Logger</a><span class="rvts6"> running, bytes that were logged will be colored:</span></p>
<p class="rvps2"><span class="rvts6">For PRG ROM segment:</span></p>
<p class="rvps2"><span class="rvts81">Dark-yellow</span><span class="rvts6"> - the byte is code</span></p>
<p class="rvps2"><span class="rvts82">Blue</span><span class="rvts6"> - the byte is data</span></p>
<p class="rvps2"><span class="rvts83">Cyan</span><span class="rvts6"> - the byte is PCM audio data</span></p>
<p class="rvps2"><span class="rvts80">Green</span><span class="rvts6"> - the byte is both code and data</span></p>
<p class="rvps2"><span class="rvts82">Dark-yellow</span><span class="rvts6"> - the byte is code</span></p>
<p class="rvps2"><span class="rvts83">Blue</span><span class="rvts6"> - the byte is data</span></p>
<p class="rvps2"><span class="rvts84">Cyan</span><span class="rvts6"> - the byte is PCM audio data</span></p>
<p class="rvps2"><span class="rvts81">Green</span><span class="rvts6"> - the byte is both code and data</span></p>
<p class="rvps2"><span class="rvts6">For CHR ROM segment:</span></p>
<p class="rvps2"><span class="rvts84">Yellow</span><span class="rvts6"> - the byte was rendered</span></p>
<p class="rvps2"><span class="rvts85">Light-blue</span><span class="rvts6"> - the byte was read programmatically</span></p>
<p class="rvps2"><span class="rvts86">Light-green</span><span class="rvts6"> - the byte was both rendered and read programmatically</span></p>
<p class="rvps2"><span class="rvts85">Yellow</span><span class="rvts6"> - the byte was rendered</span></p>
<p class="rvps2"><span class="rvts86">Light-blue</span><span class="rvts6"> - the byte was read programmatically</span></p>
<p class="rvps2"><span class="rvts87">Light-green</span><span class="rvts6"> - the byte was both rendered and read programmatically</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts21">Highlight Activity</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>

View File

@ -190,17 +190,17 @@
<p class="rvps2"><span class="rvts6">The following functions are available in FCEUX, in addition to standard LUA capabilities:</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts95">Emu library</span></p>
<p class="rvps2"><span class="rvts98">Emu library</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts102">emu.poweron()</span></p>
<p class="rvps2"><span class="rvts105">emu.poweron()</span></p>
<p class="rvps2"><span class="rvts56"><br/></span></p>
<p class="rvps2"><span class="rvts56">Executes a power cycle.</span></p>
<p class="rvps2"><span class="rvts56"><br/></span></p>
<p class="rvps2"><span class="rvts102">emu.softreset()</span></p>
<p class="rvps2"><span class="rvts105">emu.softreset()</span></p>
<p class="rvps2"><span class="rvts56"><br/></span></p>
<p class="rvps2"><span class="rvts56">Executes a (soft) reset.</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts96">emu.speedmode(string mode)</span></p>
<p class="rvps2"><span class="rvts99">emu.speedmode(string mode)</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">Set the emulator to given speed. The mode argument can be one of these:</span></p>
<p class="rvps2"><span class="rvts53"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts53">- "normal"</span></p>
@ -208,88 +208,88 @@
<p class="rvps2"><span class="rvts53"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts53">- "turbo"</span></p>
<p class="rvps2"><span class="rvts53"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts53">- "maximum"</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts96">emu.frameadvance()</span></p>
<p class="rvps2"><span class="rvts99">emu.frameadvance()</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">Advance the emulator by one frame. It's like pressing the frame advance button once.</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">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 class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts96">emu.pause()</span></p>
<p class="rvps2"><span class="rvts99">emu.pause()</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">Pauses the emulator.</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts96">emu.unpause()</span></p>
<p class="rvps2"><span class="rvts99">emu.unpause()</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">Unpauses the emulator.</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts96">emu.exec_count(int count, function func)</span></p>
<p class="rvps2"><span class="rvts99">emu.exec_count(int count, function func)</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">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 class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts97">emu.exec_time(int time</span><span class="rvts96">, function func</span><span class="rvts97">)</span></p>
<p class="rvps2"><span class="rvts100">emu.exec_time(int time</span><span class="rvts99">, function func</span><span class="rvts100">)</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">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 class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts96">emu.setrenderplanes(bool sprites, bool background)</span></p>
<p class="rvps2"><span class="rvts99">emu.setrenderplanes(bool sprites, bool background)</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">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 class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts97">emu.message(string message)</span></p>
<p class="rvps2"><span class="rvts100">emu.message(string message)</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">Displays given message on screen in the standard messages position. Use gui.text() when you need to position text.</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts96">int emu.framecount()</span></p>
<p class="rvps2"><span class="rvts99">int emu.framecount()</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">Returns the framecount value. The frame counter runs without a movie running so this always returns a value.</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts96">int emu.lagcount()</span></p>
<p class="rvps2"><span class="rvts99">int emu.lagcount()</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">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 class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts96">bool emu.lagged()</span></p>
<p class="rvps2"><span class="rvts99">bool emu.lagged()</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">Returns true if currently in a lagframe, false otherwise.</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts96">emu.setlagflag(bool value)</span></p>
<p class="rvps2"><span class="rvts99">emu.setlagflag(bool value)</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">Sets current value of lag flag.</span></p>
<p class="rvps2"><span class="rvts53">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 class="rvps2"><span class="rvts53">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 class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts96">bool emu.emulating()</span></p>
<p class="rvps2"><span class="rvts99">bool emu.emulating()</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">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 class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts96">bool emu.paused()</span></p>
<p class="rvps2"><span class="rvts99">bool emu.paused()</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">Returns true if emulator is paused, false otherwise.</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts96">bool emu.readonly()</span></p>
<p class="rvps2"><span class="rvts99">bool emu.readonly()</span></p>
<p class="rvps2"><span class="rvts53">Alias: movie.readonly</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">Returns whether the emulator is in read-only state. &nbsp;</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">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 class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts96">emu.setreadonly(bool state)</span></p>
<p class="rvps2"><span class="rvts99">emu.setreadonly(bool state)</span></p>
<p class="rvps2"><span class="rvts53">Alias: movie.setreadonly</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">Sets the read-only status to read-only if argument is true and read+write if false.</span></p>
<p class="rvps2"><span class="rvts53">Note: This might result in an error if the medium of the movie file is not writeable (such as in an archive file).</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">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 class="rvps2"><span class="rvts108"><br/></span></p>
<p class="rvps2"><span class="rvts109">emu.getdir()</span></p>
<p class="rvps2"><span class="rvts110"><br/></span></p>
<p class="rvps2"><span class="rvts110">Returns the path of fceux.exe as a string.</span></p>
<p class="rvps2"><span class="rvts109"><br/></span></p>
<p class="rvps2"><span class="rvts109">emu.loadrom(string filename)</span></p>
<p class="rvps2"><span class="rvts110"><br/></span></p>
<p class="rvps2"><span class="rvts110">Loads the ROM from the directory relative to the lua script or from the absolute path. Hence, the filename parameter can be absolute or relative path.</span></p>
<p class="rvps2"><span class="rvts110"><br/></span></p>
<p class="rvps2"><span class="rvts110">If the ROM can't be loaded, loads the most recent one.</span></p>
<p class="rvps2"><span class="rvts111"><br/></span></p>
<p class="rvps2"><span class="rvts112">emu.getdir()</span></p>
<p class="rvps2"><span class="rvts113"><br/></span></p>
<p class="rvps2"><span class="rvts113">Returns the path of fceux.exe as a string.</span></p>
<p class="rvps2"><span class="rvts112"><br/></span></p>
<p class="rvps2"><span class="rvts112">emu.loadrom(string filename)</span></p>
<p class="rvps2"><span class="rvts113"><br/></span></p>
<p class="rvps2"><span class="rvts113">Loads the ROM from the directory relative to the lua script or from the absolute path. Hence, the filename parameter can be absolute or relative path.</span></p>
<p class="rvps2"><span class="rvts113"><br/></span></p>
<p class="rvps2"><span class="rvts113">If the ROM can't be loaded, loads the most recent one.</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts96">emu.registerbefore(function func)</span></p>
<p class="rvps2"><span class="rvts99">emu.registerbefore(function func)</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">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 class="rvps2"><span class="rvts53"><br/></span></p>
@ -297,11 +297,11 @@
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">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 class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts96">emu.registerafter(function func)</span></p>
<p class="rvps2"><span class="rvts99">emu.registerafter(function func)</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">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 class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts96">emu.registerexit(function func)</span></p>
<p class="rvps2"><span class="rvts99">emu.registerexit(function func)</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">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 class="rvps2"><span class="rvts53"><br/></span></p>
@ -309,15 +309,15 @@
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">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.&nbsp;</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts96">bool emu.addgamegenie(string str)</span></p>
<p class="rvps2"><span class="rvts99">bool emu.addgamegenie(string str)</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">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 class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">Usage: emu.addgamegenie("NUTANT")</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">Note that the Cheats Dialog Box won't show the code unless you close and reopen it.</span></p>
<p class="rvps2"><span class="rvts96"><br/></span></p>
<p class="rvps2"><span class="rvts96">bool emu.delgamegenie(string str)</span></p>
<p class="rvps2"><span class="rvts99"><br/></span></p>
<p class="rvps2"><span class="rvts99">bool emu.delgamegenie(string str)</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">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 class="rvps2"><span class="rvts53"><br/></span></p>
@ -325,11 +325,11 @@
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">Note that the Cheats Dialog Box won't show the code unless you close and reopen it.</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts96">emu.print(string str)</span></p>
<p class="rvps2"><span class="rvts99">emu.print(string str)</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">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 class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts96">emu.getscreenpixel(int x, int y, bool getemuscreen)</span></p>
<p class="rvps2"><span class="rvts99">emu.getscreenpixel(int x, int y, bool getemuscreen)</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">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 class="rvps2"><span class="rvts53"><br/></span></p>
@ -339,86 +339,86 @@
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">You can avoid getting LUA data by putting the data into a function, and feeding the function name to emu.registerbefore.</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts96">emu.getscreenpixel(int x, int y, bool getemuscreen)</span></p>
<p class="rvps2"><span class="rvts99">emu.getscreenpixel(int x, int y, bool getemuscreen)</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">Returns the separate RGB components of the given screen pixel, and the&nbsp;</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts96">emu.exit()</span></p>
<p class="rvps2"><span class="rvts99">emu.exit()</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">Closes FCEUX. Useful for run-and-close scripts like automatic screenshots taking.</span></p>
<p class="rvps2"><span class="rvts95"><br/></span></p>
<p class="rvps2"><span class="rvts95"><br/></span></p>
<p class="rvps2"><span class="rvts95">FCEU library</span></p>
<p class="rvps2"><span class="rvts98"><br/></span></p>
<p class="rvps2"><span class="rvts98"><br/></span></p>
<p class="rvps2"><span class="rvts98">FCEU library</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">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 class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts104">ROM Library</span></p>
<p class="rvps2"><span class="rvts107">ROM Library</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts96">rom.getfilename()</span></p>
<p class="rvps2"><span class="rvts96"><br/></span></p>
<p class="rvps2"><span class="rvts111">Get the base filename of the ROM loaded.</span></p>
<p class="rvps2"><span class="rvts96"><br/></span></p>
<p class="rvps2"><span class="rvts96">rom.gethash(string type)</span></p>
<p class="rvps2"><span class="rvts96"><br/></span></p>
<p class="rvps2"><span class="rvts111">Get a hash of the ROM loaded, for verification. If type is "md5", returns a hex string of the MD5 hash. If type is "base64", returns a base64 string of the MD5 hash, just like the movie romChecksum value.</span></p>
<p class="rvps2"><span class="rvts96"><br/></span></p>
<p class="rvps2"><span class="rvts96">rom.readbyte(int address)</span></p>
<p class="rvps2"><span class="rvts96">rom.readbyteunsigned(int address)</span></p>
<p class="rvps2"><span class="rvts99">rom.getfilename()</span></p>
<p class="rvps2"><span class="rvts99"><br/></span></p>
<p class="rvps2"><span class="rvts114">Get the base filename of the ROM loaded.</span></p>
<p class="rvps2"><span class="rvts99"><br/></span></p>
<p class="rvps2"><span class="rvts99">rom.gethash(string type)</span></p>
<p class="rvps2"><span class="rvts99"><br/></span></p>
<p class="rvps2"><span class="rvts114">Get a hash of the ROM loaded, for verification. If type is "md5", returns a hex string of the MD5 hash. If type is "base64", returns a base64 string of the MD5 hash, just like the movie romChecksum value.</span></p>
<p class="rvps2"><span class="rvts99"><br/></span></p>
<p class="rvps2"><span class="rvts99">rom.readbyte(int address)</span></p>
<p class="rvps2"><span class="rvts99">rom.readbyteunsigned(int address)</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">Get an unsigned byte from the actual ROM file at the given address. &nbsp;</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">This includes the header! It's the same as opening the file in a hex-editor.</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts96">rom.readbytesigned(int address)</span></p>
<p class="rvps2"><span class="rvts99">rom.readbytesigned(int address)</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">Get a signed byte from the actual ROM file at the given address. Returns a byte that is signed.</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">This includes the header! It's the same as opening the file in a hex-editor.</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts106">rom.writebyte()</span></p>
<p class="rvps2"><span class="rvts109">rom.writebyte()</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">Write the value to the ROM 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 class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">Editing the header is not available.</span></p>
<p class="rvps2"><span class="rvts107"><br/></span></p>
<p class="rvps2"><span class="rvts104">Memory Library</span></p>
<p class="rvps2"><span class="rvts110"><br/></span></p>
<p class="rvps2"><span class="rvts107">Memory Library</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts96">memory.readbyte(int address)</span></p>
<p class="rvps2"><span class="rvts96">memory.readbyteunsigned(int address)</span></p>
<p class="rvps2"><span class="rvts99">memory.readbyte(int address)</span></p>
<p class="rvps2"><span class="rvts99">memory.readbyteunsigned(int address)</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">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 class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts96">memory.readbyterange(int address, int length)</span></p>
<p class="rvps2"><span class="rvts99">memory.readbyterange(int address, int length)</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">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 class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts96">memory.readbytesigned(int address)</span></p>
<p class="rvps2"><span class="rvts99">memory.readbytesigned(int address)</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">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 class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts96">memory.readword(int addressLow, [int addressHigh])</span></p>
<p class="rvps2"><span class="rvts96">memory.readwordunsigned(int addressLow, [int addressHigh])</span></p>
<p class="rvps2"><span class="rvts99">memory.readword(int addressLow, [int addressHigh])</span></p>
<p class="rvps2"><span class="rvts99">memory.readwordunsigned(int addressLow, [int addressHigh])</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">Get an unsigned word from the RAM at the given address. Returns a 16-bit value regardless of emulator. The value will always be positive.</span></p>
<p class="rvps2"><span class="rvts53">If you only provide a single parameter (addressLow), the function treats it as address of little-endian word. if you provide two parameters, the function reads the low byte from addressLow and the high byte from addressHigh, so you can use it in games which like to store their variables in separate form (a lot of NES games do).</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts96">memory.readwordsigned(int addressLow, [int addressHigh])</span></p>
<p class="rvps2"><span class="rvts99">memory.readwordsigned(int addressLow, [int addressHigh])</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">The same as above, except the returned value is signed, i.e. its most significant bit will serve as the sign.</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts96">memory.writebyte(int address, int value)</span></p>
<p class="rvps2"><span class="rvts99">memory.writebyte(int address, int value)</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">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 class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts96">int memory.getregister(cpuregistername)</span></p>
<p class="rvps2"><span class="rvts99">int memory.getregister(cpuregistername)</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">Returns the current value of the given hardware register.</span></p>
<p class="rvps2"><span class="rvts53">For example, memory.getregister("pc") will return the main CPU's current Program Counter.</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">Valid registers are: "a", "x", "y", "s", "p", and "pc".</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts96">memory.setregister(string cpuregistername, int value)</span></p>
<p class="rvps2"><span class="rvts99">memory.setregister(string cpuregistername, int value)</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">Sets the current value of the given hardware register.</span></p>
<p class="rvps2"><span class="rvts53">For example, memory.setregister("pc",0x200) will change the main CPU's current Program Counter to 0x200.</span></p>
@ -427,8 +427,8 @@
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">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.&nbsp;</span></p>
<p class="rvps2"><a name="LuaBreakpoints"></a><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts96">memory.register(int address, [int size,] function func)</span></p>
<p class="rvps2"><span class="rvts96">memory.registerwrite(int address, [int size,] function func)</span></p>
<p class="rvps2"><span class="rvts99">memory.register(int address, [int size,] function func)</span></p>
<p class="rvps2"><span class="rvts99">memory.registerwrite(int address, [int size,] function func)</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">Registers a function to be called immediately whenever the given memory address range is written to.</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
@ -442,9 +442,9 @@
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">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 class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts96">memory.registerexec(int address, [int size,] function func)</span></p>
<p class="rvps2"><span class="rvts96">memory.registerrun(int address, [int size,] function func)</span></p>
<p class="rvps2"><span class="rvts96">memory.registerexecute(int address, [int size,] function func)</span></p>
<p class="rvps2"><span class="rvts99">memory.registerexec(int address, [int size,] function func)</span></p>
<p class="rvps2"><span class="rvts99">memory.registerrun(int address, [int size,] function func)</span></p>
<p class="rvps2"><span class="rvts99">memory.registerexecute(int address, [int size,] function func)</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">Registers a function to be called immediately whenever the emulated system runs code located in the given memory address range.</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
@ -456,7 +456,7 @@
<table width="100%" border="1" cellpadding="1" cellspacing="2" style="border-color: #000000; border-style: solid; border-spacing: 2px;">
<tr valign="top">
<td style="border-color: #000000; border-style: solid; padding: 1px;">
<p class="rvps2"><span class="rvts105">Example of custom breakpoint:</span></p>
<p class="rvps2"><span class="rvts108">Example of custom breakpoint:</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">function CounterBreak()</span></p>
<p class="rvps6"><span class="rvts53">ObjCtr = memory.getregister("y")</span></p>
@ -472,44 +472,44 @@
</div>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts104">PPU Library</span></p>
<p class="rvps2"><span class="rvts104"><br/></span></p>
<p class="rvps2"><span class="rvts102">ppu.readbyte(</span><span class="rvts96">int address</span><span class="rvts102">)</span></p>
<p class="rvps2"><span class="rvts102"><br/></span></p>
<p class="rvps2"><span class="rvts107">PPU Library</span></p>
<p class="rvps2"><span class="rvts107"><br/></span></p>
<p class="rvps2"><span class="rvts105">ppu.readbyte(</span><span class="rvts99">int address</span><span class="rvts105">)</span></p>
<p class="rvps2"><span class="rvts105"><br/></span></p>
<p class="rvps2"><span class="rvts53">Get an unsigned byte from the PPU at the given address. Returns a byte regardless of emulator. The byte will always be positive.</span></p>
<p class="rvps2"><span class="rvts102"><br/></span></p>
<p class="rvps2"><span class="rvts102">ppu.readbyterange(</span><span class="rvts96">int address, int length</span><span class="rvts102">)</span></p>
<p class="rvps2"><span class="rvts102"><br/></span></p>
<p class="rvps2"><span class="rvts105"><br/></span></p>
<p class="rvps2"><span class="rvts105">ppu.readbyterange(</span><span class="rvts99">int address, int length</span><span class="rvts105">)</span></p>
<p class="rvps2"><span class="rvts105"><br/></span></p>
<p class="rvps2"><span class="rvts53">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 class="rvps2"><span class="rvts104"><br/></span></p>
<p class="rvps2"><span class="rvts104"><br/></span></p>
<p class="rvps2"><span class="rvts104">Debugger Library</span></p>
<p class="rvps2"><span class="rvts107"><br/></span></p>
<p class="rvps2"><span class="rvts107"><br/></span></p>
<p class="rvps2"><span class="rvts107">Debugger Library</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts96">debugger.hitbreakpoint()</span></p>
<p class="rvps2"><span class="rvts96"><br/></span></p>
<p class="rvps2"><span class="rvts99">debugger.hitbreakpoint()</span></p>
<p class="rvps2"><span class="rvts99"><br/></span></p>
<p class="rvps2"><span class="rvts53">Simulates a breakpoint hit, pauses emulation and brings up the Debugger window. Use this function in your handlers of custom breakpoints.</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts96">int debugger.getcyclescount()</span></p>
<p class="rvps2"><span class="rvts99">int debugger.getcyclescount()</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">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 class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts96">int debugger.getinstructionscount()</span></p>
<p class="rvps2"><span class="rvts96"><br/></span></p>
<p class="rvps2"><span class="rvts99">int debugger.getinstructionscount()</span></p>
<p class="rvps2"><span class="rvts99"><br/></span></p>
<p class="rvps2"><span class="rvts53">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 class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts96">debugger.resetcyclescount()</span></p>
<p class="rvps2"><span class="rvts96"><br/></span></p>
<p class="rvps2"><span class="rvts99">debugger.resetcyclescount()</span></p>
<p class="rvps2"><span class="rvts99"><br/></span></p>
<p class="rvps2"><span class="rvts53">Resets the cycles counter.</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts96">debugger.resetinstructionscount()</span></p>
<p class="rvps2"><span class="rvts96"><br/></span></p>
<p class="rvps2"><span class="rvts99">debugger.resetinstructionscount()</span></p>
<p class="rvps2"><span class="rvts99"><br/></span></p>
<p class="rvps2"><span class="rvts53">Resets the instructions counter.</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts104">Joypad Library</span></p>
<p class="rvps2"><span class="rvts107">Joypad Library</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts96">table joypad.get(int player)</span></p>
<p class="rvps2"><span class="rvts97">table joypad.read(</span><span class="rvts96">int player</span><span class="rvts97">)</span></p>
<p class="rvps2"><span class="rvts99">table joypad.get(int player)</span></p>
<p class="rvps2"><span class="rvts100">table joypad.read(</span><span class="rvts99">int player</span><span class="rvts100">)</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">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 class="rvps2"><span class="rvts53"><br/></span></p>
@ -519,25 +519,25 @@
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">joypad.read left in for backwards compatibility with older versions of FCEU/FCEUX.</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts96">table joypad.getimmediate(int player)</span></p>
<p class="rvps2"><span class="rvts97">table joypad.readimmediate(</span><span class="rvts96">int player</span><span class="rvts97">)</span></p>
<p class="rvps2"><span class="rvts99">table joypad.getimmediate(int player)</span></p>
<p class="rvps2"><span class="rvts100">table joypad.readimmediate(</span><span class="rvts99">int player</span><span class="rvts100">)</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">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 class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">As of FCEUX 2.2.0, the function only works in Windows. In Linux this function will return nil.</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts96">table joypad.getdown(int player)</span></p>
<p class="rvps2"><span class="rvts96">table joypad.readdown(int player)</span></p>
<p class="rvps2"><span class="rvts99">table joypad.getdown(int player)</span></p>
<p class="rvps2"><span class="rvts99">table joypad.readdown(int player)</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">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 class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts96">table joypad.getup(int player)</span></p>
<p class="rvps2"><span class="rvts96">table joypad.readup(int player)</span></p>
<p class="rvps2"><span class="rvts99">table joypad.getup(int player)</span></p>
<p class="rvps2"><span class="rvts99">table joypad.readup(int player)</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">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 class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts96">joypad.set(int player, table input)</span></p>
<p class="rvps2"><span class="rvts97">joypad.write(</span><span class="rvts96">int player, table input</span><span class="rvts97">)</span></p>
<p class="rvps2"><span class="rvts99">joypad.set(int player, table input)</span></p>
<p class="rvps2"><span class="rvts100">joypad.write(</span><span class="rvts99">int player, table input</span><span class="rvts100">)</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">Set the inputs for the given player. Table keys look like this (case sensitive):</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
@ -556,9 +556,9 @@
<p class="rvps2"><span class="rvts53">joypad.write left in for backwards compatibility with older versions of FCEU/FCEUX.</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts104">Zapper Library</span></p>
<p class="rvps2"><span class="rvts107">Zapper Library</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts97">table zapper.read()</span></p>
<p class="rvps2"><span class="rvts100">table zapper.read()</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">Returns the zapper data</span></p>
<p class="rvps2"><span class="rvts53">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>
@ -567,7 +567,7 @@
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">The return table consists of 3 values: x, y, and fire. &nbsp;x and y are the x,y coordinates of the zapper target in terms of pixels. &nbsp;fire represents the zapper firing. &nbsp;0 = not firing, 1 = firing</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts96">zapper.set(table input)</span></p>
<p class="rvps2"><span class="rvts99">zapper.set(table input)</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">Sets the zapper input state.</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
@ -580,60 +580,60 @@
<p class="rvps2"><span class="rvts53">Note: The zapper is always controller 2 on the NES so there is no player argument to these functions.</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts104">Input Library</span></p>
<p class="rvps2"><span class="rvts107">Input Library</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts96">table input.get()</span></p>
<p class="rvps2"><span class="rvts96">table input.read()</span></p>
<p class="rvps2"><span class="rvts99">table input.get()</span></p>
<p class="rvps2"><span class="rvts99">table input.read()</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">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 class="rvps2"><span class="rvts53">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 class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts96">string input.popup</span></p>
<p class="rvps2"><span class="rvts99">string input.popup</span></p>
<p class="rvps2"><span class="rvts53">Alias: gui.popup</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">Requests input from the user using a multiple-option message box. See gui.popup for complete usage and returns.</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts104">Savestate Library</span></p>
<p class="rvps2"><span class="rvts107">Savestate Library</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts97">object savestate.object(int slot = nil)</span></p>
<p class="rvps2"><span class="rvts100">object savestate.object(int slot = nil)</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">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 class="rvps2"><span class="rvts53">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 class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">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 class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts97">object savestate.create(int slot = nil)</span></p>
<p class="rvps2"><span class="rvts100">object savestate.create(int slot = nil)</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">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 class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts97">savestate.save(object savestate)</span></p>
<p class="rvps2"><span class="rvts100">savestate.save(object savestate)</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">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 class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts97">savestate.load(object savestate)</span></p>
<p class="rvps2"><span class="rvts100">savestate.load(object savestate)</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">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 class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">If this savestate is not persistent and not one of the predefined states, the state will be deleted after loading.</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts96">savestate.persist(object savestate)</span></p>
<p class="rvps2"><span class="rvts99">savestate.persist(object savestate)</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">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 class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts96">savestate.registersave(function func)</span></p>
<p class="rvps2"><span class="rvts99">savestate.registersave(function func)</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">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 class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">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 class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts96">savestate.registerload(function func)</span></p>
<p class="rvps2"><span class="rvts99">savestate.registerload(function func)</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">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 class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">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 class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts96">savestate.loadscriptdata(int location)</span></p>
<p class="rvps2"><span class="rvts99">savestate.loadscriptdata(int location)</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">Accuracy not yet confirmed.</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
@ -641,34 +641,34 @@
<p class="rvps2"><span class="rvts53">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 class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts104">Movie Library</span></p>
<p class="rvps2"><span class="rvts104"><br/></span></p>
<p class="rvps2"><span class="rvts102">bool movie.play(string filename, [bool read_only, [int pauseframe]])</span></p>
<p class="rvps2"><span class="rvts102">bool movie.playback(...)</span></p>
<p class="rvps2"><span class="rvts102">bool movie.load(...)</span></p>
<p class="rvps2"><span class="rvts102"><br/></span></p>
<p class="rvps2"><span class="rvts107">Movie Library</span></p>
<p class="rvps2"><span class="rvts107"><br/></span></p>
<p class="rvps2"><span class="rvts105">bool movie.play(string filename, [bool read_only, [int pauseframe]])</span></p>
<p class="rvps2"><span class="rvts105">bool movie.playback(...)</span></p>
<p class="rvps2"><span class="rvts105">bool movie.load(...)</span></p>
<p class="rvps2"><span class="rvts105"><br/></span></p>
<p class="rvps2"><span class="rvts6">Loads and plays a movie from the directory relative to the Lua script or from the absolute path. If read_only is true, the movie will be loaded in read-only mode. The default is read+write.</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">A pauseframe can be specified, which controls which frame will auto-pause the movie. By default, this is off. A true value is returned if the movie loaded correctly.</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts96">bool movie.record(string filename, [int save_type, [string author]])</span></p>
<p class="rvps2"><span class="rvts96">bool movie.save(...)</span></p>
<p class="rvps2"><span class="rvts96"><br/></span></p>
<p class="rvps2"><span class="rvts111">Starts recording a movie, using the filename, relative to the Lua script.</span></p>
<p class="rvps2"><span class="rvts111"><br/></span></p>
<p class="rvps2"><span class="rvts111">An optional save_type can be specified. If set to 0 (default), it will record from a power on state, and automatically do so. This is the recommended setting for creating movies. This can also be set to 1 for savestate or 2 for saveram movies.</span></p>
<p class="rvps2"><span class="rvts111"><br/></span></p>
<p class="rvps2"><span class="rvts111">A third parameter specifies an author string. If included, it will be recorded into the movie file.</span></p>
<p class="rvps2"><span class="rvts96"><br/></span></p>
<p class="rvps2"><span class="rvts96">bool movie.active()</span></p>
<p class="rvps2"><span class="rvts99">bool movie.record(string filename, [int save_type, [string author]])</span></p>
<p class="rvps2"><span class="rvts99">bool movie.save(...)</span></p>
<p class="rvps2"><span class="rvts99"><br/></span></p>
<p class="rvps2"><span class="rvts114">Starts recording a movie, using the filename, relative to the Lua script.</span></p>
<p class="rvps2"><span class="rvts114"><br/></span></p>
<p class="rvps2"><span class="rvts114">An optional save_type can be specified. If set to 0 (default), it will record from a power on state, and automatically do so. This is the recommended setting for creating movies. This can also be set to 1 for savestate or 2 for saveram movies.</span></p>
<p class="rvps2"><span class="rvts114"><br/></span></p>
<p class="rvps2"><span class="rvts114">A third parameter specifies an author string. If included, it will be recorded into the movie file.</span></p>
<p class="rvps2"><span class="rvts99"><br/></span></p>
<p class="rvps2"><span class="rvts99">bool movie.active()</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">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 class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts96">int movie.framecount()</span></p>
<p class="rvps2"><span class="rvts99">int movie.framecount()</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">Returns the current frame count. (Has the same affect as emu.framecount)</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts96">string movie.mode()</span></p>
<p class="rvps2"><span class="rvts99">string movie.mode()</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">Returns the current state of movie playback. Returns one of the following:</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
@ -678,41 +678,41 @@
<p class="rvps2"><span class="rvts53">- "taseditor"</span></p>
<p class="rvps2"><span class="rvts53">- nil</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts96">movie.rerecordcounting(bool counting)</span></p>
<p class="rvps2"><span class="rvts99">movie.rerecordcounting(bool counting)</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">Turn the rerecord counter on or off. Allows you to do some brute forcing without inflating the rerecord count.</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts96">movie.stop()</span></p>
<p class="rvps2"><span class="rvts96">movie.close()</span></p>
<p class="rvps2"><span class="rvts99">movie.stop()</span></p>
<p class="rvps2"><span class="rvts99">movie.close()</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">Stops movie playback. If no movie is loaded, it throws a Lua error.</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts96">int movie.length()</span></p>
<p class="rvps2"><span class="rvts99">int movie.length()</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">Returns the total number of frames of the current movie. Throws a Lua error if no movie is loaded.</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts96">string movie.name()</span></p>
<p class="rvps2"><span class="rvts96">string movie.getname()</span></p>
<p class="rvps2"><span class="rvts99">string movie.name()</span></p>
<p class="rvps2"><span class="rvts99">string movie.getname()</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">Returns the filename of the current movie with path. Throws a Lua error if no movie is loaded.</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts96">movie.getfilename()</span></p>
<p class="rvps2"><span class="rvts99">movie.getfilename()</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">Returns the filename of the current movie with no path. Throws a Lua error if no movie is loaded.</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts96">movie.rerecordcount()</span></p>
<p class="rvps2"><span class="rvts99">movie.rerecordcount()</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">Returns the rerecord count of the current movie. Throws a Lua error if no movie is loaded.</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts96">movie.replay()</span></p>
<p class="rvps2"><span class="rvts96">movie.playbeginning()</span></p>
<p class="rvps2"><span class="rvts99">movie.replay()</span></p>
<p class="rvps2"><span class="rvts99">movie.playbeginning()</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">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 class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">If no movie is loaded, no error is thrown and no message appears on screen.</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts96">bool movie.readonly()</span></p>
<p class="rvps2"><span class="rvts96">bool movie.getreadonly()</span></p>
<p class="rvps2"><span class="rvts99">bool movie.readonly()</span></p>
<p class="rvps2"><span class="rvts99">bool movie.getreadonly()</span></p>
<p class="rvps2"><span class="rvts53">Alias: emu.getreadonly</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">FCEUX keeps the read-only status even without a movie loaded.</span></p>
@ -721,7 +721,7 @@
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">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 class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts96">movie.setreadonly(bool state)</span></p>
<p class="rvps2"><span class="rvts99">movie.setreadonly(bool state)</span></p>
<p class="rvps2"><span class="rvts53">Alias: emu.setreadonly</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">FCEUX keeps the read-only status even without a movie loaded.</span></p>
@ -731,45 +731,45 @@
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">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 class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts96">bool movie.recording()</span></p>
<p class="rvps2"><span class="rvts99">bool movie.recording()</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">Returns true if there is a movie loaded and in record mode.</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts96">bool movie.playing()</span></p>
<p class="rvps2"><span class="rvts99">bool movie.playing()</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">Returns true if there is a movie loaded and in play mode.</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts96">bool movie.ispoweron()</span></p>
<p class="rvps2"><span class="rvts99">bool movie.ispoweron()</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">Returns true if the movie recording or loaded started from 'Start'.</span></p>
<p class="rvps2"><span class="rvts53">Returns false if the movie uses a save state.</span></p>
<p class="rvps2"><span class="rvts53">Opposite of movie.isfromsavestate()</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts96">bool movie.isfromsavestate()</span></p>
<p class="rvps2"><span class="rvts99">bool movie.isfromsavestate()</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">Returns true if the movie recording or loaded started from 'Now'.</span></p>
<p class="rvps2"><span class="rvts53">Returns false if the movie was recorded from a reset.</span></p>
<p class="rvps2"><span class="rvts53">Opposite of movie.ispoweron()</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts96">string movie.name()</span></p>
<p class="rvps2"><span class="rvts99">string movie.name()</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">If a movie is loaded it returns the name of the movie, else it throws an error.</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts96">bool movie.readonly()</span></p>
<p class="rvps2"><span class="rvts99">bool movie.readonly()</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">Returns the state of read-only. True if in playback mode, false if in record mode.</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts104">GUI Library</span></p>
<p class="rvps2"><span class="rvts107">GUI Library</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts96">gui.pixel(int x, int y, type color)</span></p>
<p class="rvps2"><span class="rvts96">gui.drawpixel(int x, int y, type color)</span></p>
<p class="rvps2"><span class="rvts96">gui.setpixel(int x, int y, type color)</span></p>
<p class="rvps2"><span class="rvts96">gui.writepixel(int x, int y, type color)</span></p>
<p class="rvps2"><span class="rvts99">gui.pixel(int x, int y, type color)</span></p>
<p class="rvps2"><span class="rvts99">gui.drawpixel(int x, int y, type color)</span></p>
<p class="rvps2"><span class="rvts99">gui.setpixel(int x, int y, type color)</span></p>
<p class="rvps2"><span class="rvts99">gui.writepixel(int x, int y, type color)</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">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 class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts96">gui.getpixel(int x, int y)</span></p>
<p class="rvps2"><span class="rvts99">gui.getpixel(int x, int y)</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">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 class="rvps2"><span class="rvts53"><br/></span></p>
@ -777,37 +777,37 @@
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">See emu.getscreenpixel() for an emulator screen variant.</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts96">gui.line(int x1, int y1, int x2, int y2 [, color [, skipfirst]])</span></p>
<p class="rvps2"><span class="rvts96">gui.drawline(int x1, int y1, int x2, int y2 [, color [, skipfirst]])</span></p>
<p class="rvps2"><span class="rvts99">gui.line(int x1, int y1, int x2, int y2 [, color [, skipfirst]])</span></p>
<p class="rvps2"><span class="rvts99">gui.drawline(int x1, int y1, int x2, int y2 [, color [, skipfirst]])</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">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 class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts96">gui.box(int x1, int y1, int x2, int y2 [, fillcolor [, outlinecolor]]))</span></p>
<p class="rvps2"><span class="rvts96">gui.drawbox(int x1, int y1, int x2, int y2 [, fillcolor [, outlinecolor]]))</span></p>
<p class="rvps2"><span class="rvts96">gui.rect(int x1, int y1, int x2, int y2 [, fillcolor [, outlinecolor]]))</span></p>
<p class="rvps2"><span class="rvts96">gui.drawrect(int x1, int y1, int x2, int y2 [, fillcolor [, outlinecolor]]))</span></p>
<p class="rvps2"><span class="rvts99">gui.box(int x1, int y1, int x2, int y2 [, fillcolor [, outlinecolor]]))</span></p>
<p class="rvps2"><span class="rvts99">gui.drawbox(int x1, int y1, int x2, int y2 [, fillcolor [, outlinecolor]]))</span></p>
<p class="rvps2"><span class="rvts99">gui.rect(int x1, int y1, int x2, int y2 [, fillcolor [, outlinecolor]]))</span></p>
<p class="rvps2"><span class="rvts99">gui.drawrect(int x1, int y1, int x2, int y2 [, fillcolor [, outlinecolor]]))</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">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 class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">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 class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts96">gui.text(int x, int y, string str [, textcolor [, backcolor]])</span></p>
<p class="rvps2"><span class="rvts96">gui.drawtext(int x, int y, string str [, textcolor [, backcolor]])</span></p>
<p class="rvps2"><span class="rvts99">gui.text(int x, int y, string str [, textcolor [, backcolor]])</span></p>
<p class="rvps2"><span class="rvts99">gui.drawtext(int x, int y, string str [, textcolor [, backcolor]])</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">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 class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts96">gui.parsecolor(color)</span></p>
<p class="rvps2"><span class="rvts99">gui.parsecolor(color)</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">Returns the separate RGBA components of the given color.</span></p>
<p class="rvps2"><span class="rvts53">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 class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts96">gui.savescreenshot()</span></p>
<p class="rvps2"><span class="rvts99">gui.savescreenshot()</span></p>
<p class="rvps2"><span class="rvts53">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 class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts96">gui.savescreenshotas(string name)</span></p>
<p class="rvps2"><span class="rvts99">gui.savescreenshotas(string name)</span></p>
<p class="rvps2"><span class="rvts53">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 class="rvps2"><span class="rvts53">&nbsp;</span></p>
<p class="rvps2"><span class="rvts96">string gui.gdscreenshot(bool getemuscreen)</span></p>
<p class="rvps2"><span class="rvts99">string gui.gdscreenshot(bool getemuscreen)</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">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 class="rvps2"><span class="rvts53"><br/></span></p>
@ -815,11 +815,11 @@
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">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 a Lua screen element.</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts101">Warning:</span><span class="rvts53"> 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 class="rvps2"><span class="rvts104">Warning:</span><span class="rvts53"> 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 class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts96">gui.gdoverlay([int dx=0, int dy=0,] string str [, sx=0, sy=0, sw, sh] [, float alphamul=1.0])</span></p>
<p class="rvps2"><span class="rvts96">gui.image([int dx=0, int dy=0,] string str [, sx=0, sy=0, sw, sh] [, float alphamul=1.0])</span></p>
<p class="rvps2"><span class="rvts96">gui.drawimage([int dx=0, int dy=0,] string str [, sx=0, sy=0, sw, sh] [, float alphamul=1.0])</span></p>
<p class="rvps2"><span class="rvts99">gui.gdoverlay([int dx=0, int dy=0,] string str [, sx=0, sy=0, sw, sh] [, float alphamul=1.0])</span></p>
<p class="rvps2"><span class="rvts99">gui.image([int dx=0, int dy=0,] string str [, sx=0, sy=0, sw, sh] [, float alphamul=1.0])</span></p>
<p class="rvps2"><span class="rvts99">gui.drawimage([int dx=0, int dy=0,] string str [, sx=0, sy=0, sw, sh] [, float alphamul=1.0])</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">Draws an image on the screen. gdimage must be in truecolor gd string format.</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
@ -833,20 +833,20 @@
<p class="rvps2"><span class="rvts53">local gdstr = gd.createFromPng("myimage.png"):gdStr()</span></p>
<p class="rvps2"><span class="rvts53">gui.gdoverlay(gdstr)&nbsp;</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts96">gui.opacity(int alpha)</span></p>
<p class="rvps2"><span class="rvts99">gui.opacity(int alpha)</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">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.&nbsp;</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts96">gui.transparency(int trans)</span></p>
<p class="rvps2"><span class="rvts99">gui.transparency(int trans)</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">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).&nbsp;</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts96">function gui.register(function func)</span></p>
<p class="rvps2"><span class="rvts96"><br/></span></p>
<p class="rvps2"><span class="rvts99">function gui.register(function func)</span></p>
<p class="rvps2"><span class="rvts99"><br/></span></p>
<p class="rvps2"><span class="rvts53">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 class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts96">string gui.popup(string message [, string type = "ok" [, string icon = "message"]])</span></p>
<p class="rvps2"><span class="rvts96">string input.popup(string message [, string type = "yesno" [, string icon = "question"]])</span></p>
<p class="rvps2"><span class="rvts99">string gui.popup(string message [, string type = "ok" [, string icon = "message"]])</span></p>
<p class="rvps2"><span class="rvts99">string input.popup(string message [, string type = "yesno" [, string icon = "question"]])</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">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 class="rvps2"><span class="rvts53"><br/></span></p>
@ -861,9 +861,9 @@
<p class="rvps2"><span class="rvts53">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 class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts104">Sound Library</span></p>
<p class="rvps2"><span class="rvts107">Sound Library</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts96">table sound.get()</span></p>
<p class="rvps2"><span class="rvts99">table sound.get()</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">Returns current state of PSG channels in big array.</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
@ -932,59 +932,59 @@
<p class="rvps2"><span class="rvts53">}</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts104">TAS Editor Library</span></p>
<p class="rvps2"><span class="rvts96"><br/></span></p>
<p class="rvps2"><span class="rvts96">taseditor.registerauto(function func)</span></p>
<p class="rvps2"><span class="rvts96">taseditor.registermanual(function func)</span></p>
<p class="rvps2"><span class="rvts96">bool taseditor.engaged()</span></p>
<p class="rvps2"><span class="rvts96">bool taseditor.markedframe(int frame)</span></p>
<p class="rvps2"><span class="rvts96">int taseditor.getmarker(int frame)</span></p>
<p class="rvps2"><span class="rvts96">int taseditor.setmarker(int frame)</span></p>
<p class="rvps2"><span class="rvts96">taseditor.clearmarker(int frame)</span></p>
<p class="rvps2"><span class="rvts96">string taseditor.getnote(int index)</span></p>
<p class="rvps2"><span class="rvts96">taseditor.setnote(int index, string newtext)</span></p>
<p class="rvps2"><span class="rvts96">int taseditor.getcurrentbranch()</span></p>
<p class="rvps2"><span class="rvts96">string taseditor.getrecordermode()</span></p>
<p class="rvps2"><span class="rvts96">int taseditor.getsuperimpose()</span></p>
<p class="rvps2"><span class="rvts96">int taseditor.getlostplayback()</span></p>
<p class="rvps2"><span class="rvts96">int taseditor.getplaybacktarget()</span></p>
<p class="rvps2"><span class="rvts96">taseditor.setplayback(int frame)</span></p>
<p class="rvps2"><span class="rvts96">taseditor.stopseeking()</span></p>
<p class="rvps2"><span class="rvts96">taseditor.getselection()</span></p>
<p class="rvps2"><span class="rvts96">taseditor.setselection()</span></p>
<p class="rvps2"><span class="rvts96">int taseditor.getinput(int frame, int joypad)</span></p>
<p class="rvps2"><span class="rvts96">taseditor.submitinputchange(int frame, int joypad, int input)</span></p>
<p class="rvps2"><span class="rvts96">taseditor.submitinsertframes(int frame, int number)</span></p>
<p class="rvps2"><span class="rvts96">taseditor.submitdeleteframes(int frame, int number)</span></p>
<p class="rvps2"><span class="rvts96">int taseditor.applyinputchanges([string name])</span></p>
<p class="rvps2"><span class="rvts96">taseditor.clearinputchanges()</span></p>
<p class="rvps2"><span class="rvts107">TAS Editor Library</span></p>
<p class="rvps2"><span class="rvts99"><br/></span></p>
<p class="rvps2"><span class="rvts99">taseditor.registerauto(function func)</span></p>
<p class="rvps2"><span class="rvts99">taseditor.registermanual(function func)</span></p>
<p class="rvps2"><span class="rvts99">bool taseditor.engaged()</span></p>
<p class="rvps2"><span class="rvts99">bool taseditor.markedframe(int frame)</span></p>
<p class="rvps2"><span class="rvts99">int taseditor.getmarker(int frame)</span></p>
<p class="rvps2"><span class="rvts99">int taseditor.setmarker(int frame)</span></p>
<p class="rvps2"><span class="rvts99">taseditor.clearmarker(int frame)</span></p>
<p class="rvps2"><span class="rvts99">string taseditor.getnote(int index)</span></p>
<p class="rvps2"><span class="rvts99">taseditor.setnote(int index, string newtext)</span></p>
<p class="rvps2"><span class="rvts99">int taseditor.getcurrentbranch()</span></p>
<p class="rvps2"><span class="rvts99">string taseditor.getrecordermode()</span></p>
<p class="rvps2"><span class="rvts99">int taseditor.getsuperimpose()</span></p>
<p class="rvps2"><span class="rvts99">int taseditor.getlostplayback()</span></p>
<p class="rvps2"><span class="rvts99">int taseditor.getplaybacktarget()</span></p>
<p class="rvps2"><span class="rvts99">taseditor.setplayback(int frame)</span></p>
<p class="rvps2"><span class="rvts99">taseditor.stopseeking()</span></p>
<p class="rvps2"><span class="rvts99">taseditor.getselection()</span></p>
<p class="rvps2"><span class="rvts99">taseditor.setselection()</span></p>
<p class="rvps2"><span class="rvts99">int taseditor.getinput(int frame, int joypad)</span></p>
<p class="rvps2"><span class="rvts99">taseditor.submitinputchange(int frame, int joypad, int input)</span></p>
<p class="rvps2"><span class="rvts99">taseditor.submitinsertframes(int frame, int number)</span></p>
<p class="rvps2"><span class="rvts99">taseditor.submitdeleteframes(int frame, int number)</span></p>
<p class="rvps2"><span class="rvts99">int taseditor.applyinputchanges([string name])</span></p>
<p class="rvps2"><span class="rvts99">taseditor.clearinputchanges()</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">For full description of these functions refer to TAS Editor Manual.</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts94">Bitwise Operations</span></p>
<p class="rvps2"><span class="rvts97">Bitwise Operations</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">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="rvts103" href="http://bitop.luajit.org/api.html">LuaBitOp</a><span class="rvts53"> module, since it is also embedded in FCEUX.</span></p>
<p class="rvps2"><span class="rvts53">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="rvts106" href="http://bitop.luajit.org/api.html">LuaBitOp</a><span class="rvts53"> module, since it is also embedded in FCEUX.</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts98">int AND(int n1, int n2, ..., int nn)</span></p>
<p class="rvps2"><span class="rvts98"><br/></span></p>
<p class="rvps2"><span class="rvts101">int AND(int n1, int n2, ..., int nn)</span></p>
<p class="rvps2"><span class="rvts101"><br/></span></p>
<p class="rvps2"><span class="rvts53">Binary logical AND of all the given integers.</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts98">int OR(int n1, int n2, ..., int nn)</span></p>
<p class="rvps2"><span class="rvts101">int OR(int n1, int n2, ..., int nn)</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">Binary logical OR of all the given integers.</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts98">int XOR(int n1, int n2, ..., int nn)</span></p>
<p class="rvps2"><span class="rvts101">int XOR(int n1, int n2, ..., int nn)</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">Binary logical XOR of all the given integers.&nbsp;</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts98">int BIT(int n1, int n2, ..., int nn)</span></p>
<p class="rvps2"><span class="rvts101">int BIT(int n1, int n2, ..., int nn)</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">Returns an integer with the given bits turned on. Parameters should be smaller than 31.</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts99">Appendix</span></p>
<p class="rvps2"><span class="rvts102">Appendix</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts100">On drawing</span></p>
<p class="rvps2"><span class="rvts103">On drawing</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">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 class="rvps2"><span class="rvts53"><br/></span></p>
@ -992,7 +992,7 @@
<p class="rvps2"><span class="rvts53">--320x239, 8bit color (confirm?)</span></p>
<p class="rvps2"><span class="rvts53">256x224, 8bit color (confirm?)</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts100">On colors</span></p>
<p class="rvps2"><span class="rvts103">On colors</span></p>
<p class="rvps2"><span class="rvts53"><br/></span></p>
<p class="rvps2"><span class="rvts53">Colors can be of a few types.</span></p>
<p class="rvps2"><span class="rvts53">Int: use the a formula to compose the color as a number (depends on color depth)</span></p>

View File

@ -185,19 +185,19 @@
<div class="main-content">
<p></p>
<p class="rvps2"><span class="rvts91">Using Lua scripting</span></p>
<p class="rvps2"><span class="rvts94">Using Lua scripting</span></p>
<p class="rvps2"><span class="rvts45"><br/></span></p>
<p class="rvps2"><span class="rvts6">Lua is built into FCEUX as of 2.1.2, and luapack DLL files are no longer needed in this and later versions.</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">To run lua scripts in older versions of FCEUX, you will need the lua pack which can be found </span><a class="rvts92" href="http://fceux.com/luapack">here</a><span class="rvts6">. The .dll files must be unzipped in the same folder as fceux.exe.</span></p>
<p class="rvps2"><span class="rvts91"><br/></span></p>
<p class="rvps2"><span class="rvts91">Core Lua Documentation</span></p>
<p class="rvps2"><span class="rvts6">To run lua scripts in older versions of FCEUX, you will need the lua pack which can be found </span><a class="rvts95" href="http://fceux.com/luapack">here</a><span class="rvts6">. The .dll files must be unzipped in the same folder as fceux.exe.</span></p>
<p class="rvps2"><span class="rvts94"><br/></span></p>
<p class="rvps2"><span class="rvts94">Core Lua Documentation</span></p>
<p class="rvps2"><span class="rvts45"><br/></span></p>
<p class="rvps2"><span class="rvts6">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 </span><a class="rvts92" href="http://www.lua.org/">http://www.lua.org/</a></p>
<p class="rvps2"><span class="rvts6">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 </span><a class="rvts95" href="http://www.lua.org/">http://www.lua.org/</a></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">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.</span></p>
<p class="rvps2"><span class="rvts91"><br/></span></p>
<p class="rvps2"><span class="rvts91">GUI Frontend</span></p>
<p class="rvps2"><span class="rvts94"><br/></span></p>
<p class="rvps2"><span class="rvts94">GUI Frontend</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">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.</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
@ -205,7 +205,7 @@
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">To end a Lua script, choose "Stop Lua Script" ***from where***.</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts91">FCEUX Lua Basics</span></p>
<p class="rvps2"><span class="rvts94">FCEUX Lua Basics</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">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.</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>

View File

@ -190,7 +190,7 @@
<p class="rvps2"><span class="rvts6">The following Lua libraries are integrated into FCEUX win32-executable (statically linked) and are available for using in your scripts. You can also use any other Lua library by placing its .dll files into FCEUX folder.</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts95">IUP library</span></p>
<p class="rvps2"><span class="rvts98">IUP library</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">IUP (Portable User Interface) is a toolkit for building graphical user interfaces.</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
@ -199,7 +199,7 @@
<p class="rvps2"><a class="rvts23" href="http://www.tecgraf.puc-rio.br/iup/" target="_blank">http://www.tecgraf.puc-rio.br/iup/</a></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts95">IM library</span></p>
<p class="rvps2"><span class="rvts98">IM library</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">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.</span></p>
<p class="rvps2"><span class="rvts6">File formats supported: TIFF, BMP, PNG, JPEG, GIF and AVI. Image representation includes scientific data types. About a hundred Image Processing operations are available.</span></p>
@ -207,7 +207,7 @@
<p class="rvps2"><a class="rvts23" href="http://www.tecgraf.puc-rio.br/im/" target="_blank">http://www.tecgraf.puc-rio.br/im/</a></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts95">CD library</span></p>
<p class="rvps2"><span class="rvts98">CD library</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">Canvas Draw is a graphics library.</span></p>
<p class="rvps2"><span class="rvts6">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.</span></p>
@ -215,7 +215,7 @@
<p class="rvps2"><a class="rvts23" href="http://www.tecgraf.puc-rio.br/cd/" target="_blank">http://www.tecgraf.puc-rio.br/cd/</a></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts95">LuaSocket library</span></p>
<p class="rvps2"><span class="rvts98">LuaSocket library</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">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.</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
@ -224,7 +224,7 @@
<p class="rvps2"><a class="rvts23" href="http://w3.impa.br/~diego/software/luasocket/home.html" target="_blank">http://w3.impa.br/~diego/software/luasocket/home.html</a></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts95">WinAPI library</span></p>
<p class="rvps2"><span class="rvts98">WinAPI library</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">This module provides basic tools for working with Windows system resources.</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>

View File

@ -173,7 +173,7 @@
</ol>
<div class="nav-arrows">
<div class="btn-group btn-group-xs" role="group"><a class="btn btn-default" href="GameGenieEncoderDecoder.html" title="Game Genie Encoder/Decoder" role="button"><span class="glyphicon glyphicon-menu-left" aria-hidden="true"></span></a><a class="btn btn-default" href="LuaGettingStarted.html" title="Getting Started" role="button"><span class="glyphicon glyphicon-menu-right" aria-hidden="true"></span></a></div>
<div class="btn-group btn-group-xs" role="group"><a class="btn btn-default" href="InesHeaderEditor.html" title="iNES Header Editor" role="button"><span class="glyphicon glyphicon-menu-left" aria-hidden="true"></span></a><a class="btn btn-default" href="LuaGettingStarted.html" title="Getting Started" role="button"><span class="glyphicon glyphicon-menu-right" aria-hidden="true"></span></a></div>
</div>
</div>

View File

@ -189,7 +189,7 @@
<p class="rvps2"><span class="rvts17"><br/></span></p>
<p class="rvps2"><span class="rvts17">Overview</span></p>
<p class="rvps2"><span class="rvts17"><br/></span></p>
<p class="rvps2"><span class="rvts6">Memory watch is a tool designed to values of specific known memory values in the game's </span><a class="rvts67" href="NESRAMMappingFindingValues.html">RAM</a><span class="rvts6">. Memory watch does not find values. &nbsp;To find useful values to monitor, see </span><a class="rvts67" href="CheatSearch.html">Cheats</a><span class="rvts6">, </span><span class="rvts67">Ram filter</span><span class="rvts6">, </span><a class="rvts67" href="HexEditor.html">Hex Editor</a><span class="rvts6">, and </span><a class="rvts67" href="Debugger.html">Debugger</a><span class="rvts6">.</span></p>
<p class="rvps2"><span class="rvts6">Memory watch is a tool designed to values of specific known memory values in the game's </span><a class="rvts68" href="NESRAMMappingFindingValues.html">RAM</a><span class="rvts6">. Memory watch does not find values. &nbsp;To find useful values to monitor, see </span><a class="rvts68" href="CheatSearch.html">Cheats</a><span class="rvts6">, </span><span class="rvts68">Ram filter</span><span class="rvts6">, </span><a class="rvts68" href="HexEditor.html">Hex Editor</a><span class="rvts6">, and </span><a class="rvts68" href="Debugger.html">Debugger</a><span class="rvts6">.</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts21">Inserting Values</span></p>
@ -212,7 +212,7 @@
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">You can save your addresses into watch files, as well as loading previous files using the standard save,load,new options in the File menu.</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">FCEUX uses the /memw folder by default but you can specify a new default folder in the </span><a class="rvts67" href="Directories.html">Directory Override</a><span class="rvts6"> menu.</span></p>
<p class="rvps2"><span class="rvts6">FCEUX uses the /memw folder by default but you can specify a new default folder in the </span><a class="rvts68" href="Directories.html">Directory Override</a><span class="rvts6"> menu.</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts37">Options Menu</span></p>
@ -225,7 +225,7 @@
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts21">Frozen Memory Addresses</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">If one of the watched addresses is frozen by the </span><a class="rvts67" href="CheatSearch.html">cheats dialog</a><span class="rvts6"> or the </span><a class="rvts67" href="HexEditor.html">hex editor</a><span class="rvts6">, it will display blue in the memory watch dialog.</span></p>
<p class="rvps2"><span class="rvts6">If one of the watched addresses is frozen by the </span><a class="rvts68" href="CheatSearch.html">cheats dialog</a><span class="rvts6"> or the </span><a class="rvts68" href="HexEditor.html">hex editor</a><span class="rvts6">, it will display blue in the memory watch dialog.</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts17">Memory Change Monitor</span></p>
@ -241,7 +241,7 @@
<p class="rvps2"><span class="rvts6">Reset will reset the count to 0.</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts68">Usage Example:</span></p>
<p class="rvps2"><span class="rvts69">Usage Example:</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">As an example of the memory change monitoring, Let's say we are recording a movie of the game Super C and want to keep track of when the game lags.</span></p>
<p class="rvps2"><span class="rvts6">The ram address 001C functions as a "lag flag". &nbsp;It will remain 0, then change to a positive value on a frame that the game lags.</span></p>

View File

@ -197,10 +197,10 @@
<p class="rvps2"><span class="rvts6">Emulates a power cycle, which is turning the power on and off with the Power button on the NES. ("Hard Reset")</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts21">Eject/Insert Disk</span></p>
<p class="rvps2"><span class="rvts6">Ejects or inserts a FDS disk. &nbsp;(See </span><a class="rvts47" href="FamicomDiskSytem.html">Famicom Disk System</a><span class="rvts6">)</span></p>
<p class="rvps2"><span class="rvts6">Ejects or inserts a FDS disk. &nbsp;(See </span><a class="rvts47" href="FamicomDiskSystem.html">Famicom Disk System</a><span class="rvts6">)</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts21">Switch Disk Side</span></p>
<p class="rvps2"><span class="rvts6">Switches Sides of a FDS disk. (See </span><a class="rvts47" href="FamicomDiskSytem.html">Famicom Disk System</a><span class="rvts6">)</span></p>
<p class="rvps2"><span class="rvts6">Switches Sides of a FDS disk. (See </span><a class="rvts47" href="FamicomDiskSystem.html">Famicom Disk System</a><span class="rvts6">)</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts21">Insert Coin</span></p>
<p class="rvps2"><span class="rvts6">Emulates the inserting of a coin in an arcade-style game.</span></p>

View File

@ -361,7 +361,7 @@
<p class="rvps2"><span class="rvts6">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><span class="rvts40">Teenage Mutant Ninja Turtles</span><span class="rvts6">.</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts45">Block 4</span></p>
<p class="rvps2"><span class="rvts112"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts112"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts112"> &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 class="rvps2"><span class="rvts115"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts115"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="rvts115"> &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 class="rvps2"><span class="rvts39">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 class="rvps2"><span class="rvts39">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 class="rvps2"><span class="rvts39">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

@ -1,340 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="generator" content="HelpNDoc Personal Edition 7.0.0.199">
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="icon" href="favicon.ico"/>
<title>What's New? 2.3.0 (changelog)</title>
<meta name="description" content="" />
<meta name="keywords" content="">
<!-- Twitter Card data -->
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="What's New? 2.3.0 (changelog)">
<meta name="twitter:description" content="">
<!-- Open Graph data -->
<meta property="og:title" content="What's New? 2.3.0 (changelog)" />
<meta property="og:type" content="article" />
<meta property="og:description" content="" />
<meta property="og:site_name" content="FCEUX Help" />
<!-- Bootstrap core CSS -->
<link href="vendors/bootstrap-3.4.1/css/bootstrap.min.css" rel="stylesheet"/>
<!-- IE10 viewport hack for Surface/desktop Windows 8 bug -->
<link href="vendors/bootstrap-3.4.1/css/ie10-viewport-bug-workaround.css" rel="stylesheet"/>
<!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
<!--[if lt IE 9]>
<script src="vendors/html5shiv-3.7.3/html5shiv.min.js"></script>
<script src="vendors/respond-1.4.2/respond.min.js"></script>
<![endif]-->
<!-- JsTree styles -->
<link href="vendors/jstree-3.3.10/themes/default/style.min.css" rel="stylesheet"/>
<!-- Hnd styles -->
<link href="css/layout.min.css" rel="stylesheet" />
<link href="css/effects.min.css" rel="stylesheet" />
<link href="css/theme-light-blue.min.css" rel="stylesheet" />
<link href="css/print.min.css" rel="stylesheet" media="print" />
<style type="text/css">nav { width: 250px} @media screen and (min-width:769px) { body.md-nav-expanded div#main { margin-left: 250px} body.md-nav-expanded header { padding-left: 264px} }</style>
<!-- Content style -->
<link href="css/hnd.content.css" rel="stylesheet" />
</head>
<body class="md-nav-expanded">
<div id="skip-link">
<a href="#main-content" class="element-invisible">Skip to main content</a>
</div>
<header class="headroom">
<button class="hnd-toggle btn btn-default">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span><span class="icon-bar"></span><span class="icon-bar"></span>
</button>
<h1>FCEUX Help</h1>
</header>
<nav id="panel-left" class="md-nav-expanded">
<!-- Nav tabs -->
<ul class="tab-tabs nav nav-tabs" role="tablist">
<li id="nav-close">
<button class="hnd-toggle btn btn-default">
<span class="glyphicon glyphicon-remove" aria-hidden="true"></span>
</button>
</li>
<li role="presentation" class="tab active">
<a href="#contents" id="tab-contents" aria-controls="contents" role="tab" data-toggle="tab">
<i class="glyphicon glyphicon-list"></i>
Contents
</a>
</li>
<li role="presentation" class="tab">
<a href="#index" id="tab-index" aria-controls="index" role="tab" data-toggle="tab">
<i class="glyphicon glyphicon-asterisk"></i>
Index
</a>
</li>
<li role="presentation" class="tab">
<a href="#search" id="tab-search" aria-controls="search" role="tab" data-toggle="tab">
<i class="glyphicon glyphicon-search"></i>
Search
</a>
</li>
</ul> <!-- /Nav tabs -->
<!-- Tab panes -->
<div class="tab-content">
<div role="tabpanel" class="tab-pane active" id="contents">
<div id="toc" class="tree-container unselectable"
data-url="_toc.json"
data-openlvl="1"
>
</div>
</div> <!-- /contents-->
<div role="tabpanel" class="tab-pane" id="index">
<div id="keywords" class="tree-container unselectable"
data-url="_keywords.json"
data-openlvl="1"
>
</div>
</div> <!-- /index-->
<div role="tabpanel" class="tab-pane" id="search">
<div class="search-content">
<div class="search-input">
<form id="search-form">
<div class="form-group">
<div class="input-group">
<input type="text" class="form-control" id="input-search" name="input-search" placeholder="Search..." />
<span class="input-group-btn">
<button class="btn btn-default" type="submit">
<span class="glyphicon glyphicon-search" aria-hidden="true"></span>
</button>
</span>
</div>
</div>
</form>
</div> <!-- /search-input -->
<div class="search-result">
<div id="search-info"></div>
<div class="tree-container unselectable" id="search-tree"></div>
</div> <!-- /search-result -->
</div> <!-- /search-content -->
</div> <!-- /search-->
</div> <!-- /Tab panes -->
</nav>
<div id="main">
<article>
<div id="topic-content" class="container-fluid"
data-hnd-id="Newtopic"
data-hnd-context="84"
data-hnd-title="What's New? 2.3.0 (changelog)"
>
<div class="navigation">
<ol class="breadcrumb">
<li><a href="Intro.html">Introduction</a></li>
</ol>
<div class="nav-arrows">
<div class="btn-group btn-group-xs" role="group"><a class="btn btn-default" href="Intro.html" title="Introduction" role="button"><span class="glyphicon glyphicon-menu-up" aria-hidden="true"></span></a><a class="btn btn-default" href="FCEUltraVersionHistory.html" title="FCE Ultra Version History" role="button"><span class="glyphicon glyphicon-menu-left" aria-hidden="true"></span></a><a class="btn btn-default" href="WhatsNew223.html" title="What's New? 2.2.3 (changelog)" role="button"><span class="glyphicon glyphicon-menu-right" aria-hidden="true"></span></a></div>
</div>
</div>
<a id="main-content"></a>
<h2>What's New? 2.3.0 (changelog)</h2>
<div class="main-content">
<p></p>
<p class="rvps2"><span class="rvts22">What's New? </span><span class="rvts26">2.3.0</span></p>
<p class="rvps2"><span class="rvts6">Released -- 15 December 2020</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps5"><span class="rvts27">The 2.3.0 release includes 4 years worth of improvements and bug fixes.</span></p>
<p class="rvps5"><span class="rvts28"><br/></span></p>
<p class="rvps5"><span class="rvts29">Common</span></p>
<ul style="text-indent: 0px; padding: 0; margin: 0 0 0 24px; list-style-position: outside; list-style-type: disc;">
<li class="rvps5"><span class="rvts27">64 bit build support</span></li>
</ul>
<p class="rvps2"><span class="rvts31"><br/></span></p>
<p class="rvps5"><span class="rvts28">Emulation</span></p>
<ul style="text-indent: 0px; padding: 0; margin: 0 0 0 24px; list-style-position: outside; list-style-type: disc;">
<li class="rvps5"><span class="rvts27">Added Mapper 111 cheapocabra</span></li>
<li class="rvps5"><span class="rvts27">Added Mapper 190</span></li>
<li class="rvps5"><span class="rvts27">Added RAM Init Options: default (00 00 00 00 FF FF FF FF as always), all FF, all 00, random.</span></li>
<li class="rvps5"><span class="rvts27">New UNIF mappers</span></li>
</ul>
<p class="rvps5"><span class="rvts28"><br/></span></p>
<p class="rvps5"><span class="rvts28">Lua</span></p>
<ul style="text-indent: 0px; padding: 0; margin: 0 0 0 24px; list-style-position: outside; list-style-type: disc;">
<li class="rvps5"><span class="rvts27">Various improvements and bug fixes to pre-existing functions</span></li>
<li class="rvps5"><span class="rvts27">Fix parsing of lua colors over 0x80000000 on 32bits systems</span></li>
<li class="rvps5"><span class="rvts27">Lua write callbacks: adding optional third parameter to retrieve the value written</span></li>
<li class="rvps5"><span class="rvts27">Added Sprites.lua script to visualize sprites</span></li>
</ul>
<p class="rvps5"><span class="rvts30"><br/></span></p>
<p class="rvps5"><span class="rvts30">New Lua functions:</span></p>
<ul style="text-indent: 0px; padding: 0; margin: 0 0 0 24px; list-style-position: outside; list-style-type: disc;">
<li class="rvps5"><span class="rvts27">emu.exit()</span></li>
<li class="rvps5"><span class="rvts27">rom.getfilename()</span></li>
</ul>
<p class="rvps5"><span class="rvts28"><br/></span></p>
<p class="rvps5"><span class="rvts28">Win32</span></p>
<ul style="text-indent: 0px; padding: 0; margin: 0 0 0 24px; list-style-position: outside; list-style-type: disc;">
<li class="rvps5"><span class="rvts27">Various GUI improvements and bug fixes</span></li>
</ul>
<p class="rvps5"><span class="rvts28"><br/></span></p>
<p class="rvps5"><span class="rvts29">Debugger</span></p>
<ul style="text-indent: 0px; padding: 0; margin: 0 0 0 24px; list-style-position: outside; list-style-type: disc;">
<li class="rvps5"><span class="rvts27">Added memory read/write conditional breakpoint capability.</span></li>
<li class="rvps5"><span class="rvts27">Added illegal opcode support for breakpoints.</span></li>
<li class="rvps5"><span class="rvts27">Support for 'S' register in conditional debugger breakpoints</span></li>
<li class="rvps5"><span class="rvts27">Syntax highlight of disassembly</span></li>
</ul>
<p class="rvps5"><span class="rvts29"><br/></span></p>
<p class="rvps5"><span class="rvts29">Trace Logger</span></p>
<ul style="text-indent: 0px; padding: 0; margin: 0 0 0 24px; list-style-position: outside; list-style-type: disc;">
<li class="rvps5"><span class="rvts27">Added bank number log option</span></li>
</ul>
<p class="rvps5"><span class="rvts29"><br/></span></p>
<p class="rvps5"><span class="rvts29">CDLogger</span></p>
<ul style="text-indent: 0px; padding: 0; margin: 0 0 0 24px; list-style-position: outside; list-style-type: disc;">
<li class="rvps5"><span class="rvts27">Fix&nbsp;Fixed VRAM data logging glitch</span></li>
</ul>
<p class="rvps5"><span class="rvts30"><br/></span></p>
<p class="rvps5"><span class="rvts29">Hex Editor</span></p>
<ul style="text-indent: 0px; padding: 0; margin: 0 0 0 24px; list-style-position: outside; list-style-type: disc;">
<li class="rvps5"><span class="rvts27">Added OAM view feature</span></li>
<li class="rvps5"><span class="rvts27">Added Home/End key response</span></li>
<li class="rvps5"><span class="rvts27">Bookmark fixes for all view region types</span></li>
<li class="rvps5"><span class="rvts27">Fixed Find dialog to be able to find the first or last byte of the memory region</span></li>
<li class="rvps5"><span class="rvts27">Prevent middle mouse button from attempting to "FreezeRam" when not in RAM mode</span></li>
<li class="rvps5"><span class="rvts27">Added Load from file feature</span></li>
</ul>
<p class="rvps5"><span class="rvts28"><br/></span></p>
<p class="rvps5"><span class="rvts28">TAS Editor</span></p>
<ul style="text-indent: 0px; padding: 0; margin: 0 0 0 24px; list-style-position: outside; list-style-type: disc;">
<li class="rvps5"><span class="rvts27">Fixed dialog height that kept increasing</span></li>
</ul>
<p class="rvps5"><span class="rvts28"><br/></span></p>
<p class="rvps5"><span class="rvts28">SDL</span></p>
<ul style="text-indent: 0px; padding: 0; margin: 0 0 0 24px; list-style-position: outside; list-style-type: disc;">
<li class="rvps5"><span class="rvts27">GUI completely rewritten using Qt5. Replaces old GTK GUI.</span></li>
<li class="rvps5"><span class="rvts27">New Qt GUI now contains most of the debug tools that previously only existed in windows version.</span></li>
<li class="rvps5"><span class="rvts27">Build setup migrated to cmake. Replaces scons build setup.</span></li>
</ul>
<p class="rvps2"><span class="rvts31"><br/></span></p>
<p></p>
<p class="rvps4" style="clear: both;"><span class="rvts18">Created with the Personal Edition of HelpNDoc: </span><a class="rvts19" href="https://www.helpndoc.com/feature-tour/create-help-files-for-the-qt-help-framework">Create help files for the Qt Help Framework</a></p>
</div>
<div id="topic_footer"><div id="topic_footer_content">2020</div></div>
</div> <!-- /#topic-content -->
</article>
<footer></footer>
</div> <!-- /#main -->
<div class="mask" data-toggle="sm-nav-expanded"></div>
<!-- Modal -->
<div class="modal fade" id="hndModal" tabindex="-1" role="dialog" aria-labelledby="hndModalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
<h4 class="modal-title" id="hndModalLabel"></h4>
</div>
<div class="modal-body">
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary modal-btn-close" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
<!-- Splitter -->
<div id="hnd-splitter" style="left: 250px"></div>
<!-- Scripts -->
<script src="vendors/jquery-3.5.1/jquery.min.js"></script>
<script src="vendors/bootstrap-3.4.1/js/bootstrap.min.js"></script>
<script src="vendors/bootstrap-3.4.1/js/ie10-viewport-bug-workaround.js"></script>
<script src="vendors/markjs-8.11.1/jquery.mark.min.js"></script>
<script src="vendors/uri-1.19.2/uri.min.js"></script>
<script src="vendors/imageMapResizer-1.0.10/imageMapResizer.min.js"></script>
<script src="vendors/headroom-0.11.0/headroom.min.js"></script>
<script src="vendors/jstree-3.3.10/jstree.min.js"></script>
<script src="vendors/interactjs-1.9.22/interact.min.js"></script>
<!-- HelpNDoc scripts -->
<script src="js/polyfill.object.min.js"></script>
<script src="_translations.js"></script>
<script src="js/hndsd.min.js"></script>
<script src="js/hndse.min.js"></script>
<script src="js/app.min.js"></script>
<!-- Init script -->
<script>
$(function() {
// Create the app
var app = new Hnd.App();
// Update translations
hnd_ut(app);
// Instanciate imageMapResizer
imageMapResize();
// Custom JS
// Boot the app
app.Boot();
});
</script>
</body>
</html>

View File

@ -190,7 +190,7 @@
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts17">Introduction</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">The NES architecture includes a 6502 CPU as well as a custom video controller known as a PPU (Picture Processing Unit). &nbsp;The PPU's video memory is separated from the main CPU memory and can be read/written via special ports (see </span><a class="rvts75" href="PPU.html">PPU Memory</a><span class="rvts6">).</span></p>
<p class="rvps2"><span class="rvts6">The NES architecture includes a 6502 CPU as well as a custom video controller known as a PPU (Picture Processing Unit). &nbsp;The PPU's video memory is separated from the main CPU memory and can be read/written via special ports (see </span><a class="rvts76" href="PPU.html">PPU Memory</a><span class="rvts6">).</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">The PPU viewer will only display the contents of the current PPU memory. It does not alter game data in any way.</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
@ -203,7 +203,7 @@
<p class="rvps2"><span class="rvts6">Right clicking on one of the PPU panels will change the palette it is shown with, cycling though pattern palettes, then sprite ones, then a ninth fixed grey palette (useful for inspecting CHR if all the palettes are currently black).</span></p>
<p class="rvps2"><span class="rvts6">Putting the mouse cursor over a tile will display the tile address. Moving cursor over palette color will give palette address.</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">When </span><a class="rvts75" href="CodeDataLogger.html">Code/Data Logger</a><span class="rvts6"> is running, you can also use the "Mask unused graphics" feature. Alternatively, you can only mask tiles that were used (drawn or otherwise accessed) and emphasize the tiles that weren't used (e.g. in order to find secret sprites).</span></p>
<p class="rvps2"><span class="rvts6">When </span><a class="rvts76" href="CodeDataLogger.html">Code/Data Logger</a><span class="rvts6"> is running, you can also use the "Mask unused graphics" feature. Alternatively, you can only mask tiles that were used (drawn or otherwise accessed) and emphasize the tiles that weren't used (e.g. in order to find secret sprites).</span></p>
<p class="rvps2"><span class="rvts6">Note: this feature only works with games that use CHR ROM, because Code/Data Logger only logs accesses to CHR ROM.</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>

View File

@ -198,7 +198,9 @@
<p class="rvps2"><span class="rvts21">Load Palette</span></p>
<p class="rvps2"><span class="rvts6">Allows you to load a custom color palette (.pal) file to use for the current game loaded.</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">A note on on the format of external palettes; Palette files are expected to contain 64 8-bit RGB triplets (each in that order; red comes first in the triplet in the file, then green, then blue). Each 8-bit value represents brightness for that particular color. 0 is minimum, 255 is maximum.</span></p>
<p class="rvps2"><span class="rvts6">A note on on the format of external palettes; Palette files are expected to contain 64 or 512 8-bit RGB triplets (each in that order; red comes first in the triplet in the file, then green, then blue). Each 8-bit value represents brightness for that particular color. 0 is minimum, 255 is maximum.</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">A palette file with 64 entries while have emphasis colors generated automatically. A 512 entry file will specify a set of 64 colors to use with each emphasis state. The high 3 bits of $2001 correspond to 8 different 64 color palettes.</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">Palettes can be set on a per-game basis. To do this, put a palette file in the same directory the game is in, and add the extension "pal". Examples:</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>

View File

@ -222,6 +222,11 @@
<p class="rvps2"><span class="rvts15">Unsaturated-V6.pal</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">This palette by FirebrandX offers a more realistic brightness/contrast scale of the original console. It was developed using a direct-capture device hooked up to the NES, then error-corrected to the current and final 6th version.</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts15">RP2C03.pal &amp; RP2C04_0001.pal &amp; RP2C04_0002.pal &amp; RP2C04_0003.pal &amp; RP2C04_0004.pal</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">512 color palettes used in the RGB PPU variations used in Sharp Titler, Vs. System and PlayChoice, etc. with emphasis colors included to emulate their differing emphasis behavior.</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p></p>
<p class="rvps4" style="clear: both;"><span class="rvts18">Created with the Personal Edition of HelpNDoc: </span><a class="rvts19" href="https://www.helpndoc.com">Easy EBook and documentation generator</a></p>

View File

@ -187,16 +187,16 @@
<p></p>
<p class="rvps2"><span class="rvts22">Ram Search</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">Ram Search is a tool originally written for </span><a class="rvts65" href="http://code.google.com/p/gens-rerecording/" target="_blank">GENS rerecording</a><span class="rvts6">. &nbsp;It was ported to FCEUX in version 2.1.2. &nbsp;This dialog has also been ported to </span><a class="rvts65" href="http://code.google.com/p/snes9x-rr/" target="_blank">SNELS9x-rr</a><span class="rvts6">, </span><a class="rvts65" href="http://desmume.org/" target="_blank">Desmume</a><span class="rvts6">, </span><a class="rvts65" href="http://code.google.com/p/pcejin/" target="_blank">PCEjin</a><span class="rvts6">, </span><a class="rvts65" href="http://code.google.com/p/vba-rerecording/" target="_blank">VBA-rr</a><span class="rvts6">, </span><a class="rvts65" href="http://code.google.com/p/pcsxrr/" target="_blank">PCSX-rr</a><span class="rvts6">, </span><a class="rvts65" href="http://code.google.com/p/yabause-rr/" target="_blank">Yabause</a><span class="rvts6">, </span><a class="rvts65" href="http://code.google.com/p/vbjin/">VBjin</a><span class="rvts6">, and </span><a class="rvts65" href="http://code.google.com/p/fbarr/" target="_blank">FBA-rr</a><span class="rvts6">.</span></p>
<p class="rvps2"><span class="rvts6">Ram Search is a tool originally written for </span><a class="rvts66" href="http://code.google.com/p/gens-rerecording/" target="_blank">GENS rerecording</a><span class="rvts6">. &nbsp;It was ported to FCEUX in version 2.1.2. &nbsp;This dialog has also been ported to </span><a class="rvts66" href="http://code.google.com/p/snes9x-rr/" target="_blank">SNELS9x-rr</a><span class="rvts6">, </span><a class="rvts66" href="http://desmume.org/" target="_blank">Desmume</a><span class="rvts6">, </span><a class="rvts66" href="http://code.google.com/p/pcejin/" target="_blank">PCEjin</a><span class="rvts6">, </span><a class="rvts66" href="http://code.google.com/p/vba-rerecording/" target="_blank">VBA-rr</a><span class="rvts6">, </span><a class="rvts66" href="http://code.google.com/p/pcsxrr/" target="_blank">PCSX-rr</a><span class="rvts6">, </span><a class="rvts66" href="http://code.google.com/p/yabause-rr/" target="_blank">Yabause</a><span class="rvts6">, </span><a class="rvts66" href="http://code.google.com/p/vbjin/">VBjin</a><span class="rvts6">, and </span><a class="rvts66" href="http://code.google.com/p/fbarr/" target="_blank">FBA-rr</a><span class="rvts6">.</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">It is designed to filter RAM values just like in the </span><a class="rvts65" href="CheatSearch.html">Cheat Search</a><span class="rvts6"> dialog. &nbsp;However, it features many options that are lacking in the Cheat Search dialog. &nbsp;Among these are search undo, search preview, a modulus filter, a data size option, signed/unsigned/hex options, autosearch, and several more compare by options.</span></p>
<p class="rvps2"><span class="rvts6">It is designed to filter RAM values just like in the </span><a class="rvts66" href="CheatSearch.html">Cheat Search</a><span class="rvts6"> dialog. &nbsp;However, it features many options that are lacking in the Cheat Search dialog. &nbsp;Among these are search undo, search preview, a modulus filter, a data size option, signed/unsigned/hex options, autosearch, and several more compare by options.</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">Documentation on this dialog can be found on TASVideos </span><a class="rvts65" href="http://tasvideos.org/EmulatorResources/RamSearch.html" target="_blank">here</a><span class="rvts6">.</span></p>
<p class="rvps2"><span class="rvts6">Documentation on this dialog can be found on TASVideos </span><a class="rvts66" href="http://tasvideos.org/EmulatorResources/RamSearch.html" target="_blank">here</a><span class="rvts6">.</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts60">Hotkeys</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><a class="rvts65" href="MapHotkeys.html">Hotkeys</a><span class="rvts6"> can be assigned to common search commands so they can be easily selected while in the main window.</span></p>
<p class="rvps2"><a class="rvts66" href="MapHotkeys.html">Hotkeys</a><span class="rvts6"> can be assigned to common search commands so they can be easily selected while in the main window.</span></p>
<p></p>
<p class="rvps4" style="clear: both;"><span class="rvts18">Created with the Personal Edition of HelpNDoc: </span><a class="rvts19" href="https://www.helpndoc.com/create-epub-ebooks">Free EPub producer</a></p>

View File

@ -187,11 +187,11 @@
<p></p>
<p class="rvps2"><span class="rvts22">Ram Watch</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">Ram Watch is a tool originally written for </span><a class="rvts66" href="http://code.google.com/p/gens-rerecording/" target="_blank">GENS rerecording</a><span class="rvts6">. &nbsp;It was ported to FCEUX in version 2.1.2. &nbsp;This dialog has also been ported to </span><a class="rvts66" href="http://code.google.com/p/snes9x-rr/" target="_blank">SNES9x-rr</a><span class="rvts6">, </span><a class="rvts66" href="http://desmume.org/" target="_blank">Desmume</a><span class="rvts6">, </span><a class="rvts66" href="http://code.google.com/p/pcejin/" target="_blank">PCEjin</a><span class="rvts6">, </span><a class="rvts66" href="http://code.google.com/p/vba-rerecording/" target="_blank">VBA-rr</a><span class="rvts6">, </span><a class="rvts66" href="http://code.google.com/p/pcsxrr/" target="_blank">PCSX-rr</a><span class="rvts6">, </span><a class="rvts66" href="http://code.google.com/p/yabause-rr/" target="_blank">Yabause</a><span class="rvts6">, and </span><a class="rvts66" href="http://code.google.com/p/fbarr/" target="_blank">FBA-rr</a><span class="rvts6">.</span></p>
<p class="rvps2"><span class="rvts6">Ram Watch is a tool originally written for </span><a class="rvts67" href="http://code.google.com/p/gens-rerecording/" target="_blank">GENS rerecording</a><span class="rvts6">. &nbsp;It was ported to FCEUX in version 2.1.2. &nbsp;This dialog has also been ported to </span><a class="rvts67" href="http://code.google.com/p/snes9x-rr/" target="_blank">SNES9x-rr</a><span class="rvts6">, </span><a class="rvts67" href="http://desmume.org/" target="_blank">Desmume</a><span class="rvts6">, </span><a class="rvts67" href="http://code.google.com/p/pcejin/" target="_blank">PCEjin</a><span class="rvts6">, </span><a class="rvts67" href="http://code.google.com/p/vba-rerecording/" target="_blank">VBA-rr</a><span class="rvts6">, </span><a class="rvts67" href="http://code.google.com/p/pcsxrr/" target="_blank">PCSX-rr</a><span class="rvts6">, </span><a class="rvts67" href="http://code.google.com/p/yabause-rr/" target="_blank">Yabause</a><span class="rvts6">, and </span><a class="rvts67" href="http://code.google.com/p/fbarr/" target="_blank">FBA-rr</a><span class="rvts6">.</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">It is designed to filter ram values just like in the </span><a class="rvts66" href="CheatSearch.html">Cheat Search</a><span class="rvts6"> dialog. &nbsp;However, it features many options that are lacking in the Cheat Search dialog. &nbsp;Among these are search undo, search preview, a modulus filter, a data size option, signed/unsigned/hex options, autosearch, and several more compare by options.</span></p>
<p class="rvps2"><span class="rvts6">It is designed to filter ram values just like in the </span><a class="rvts67" href="CheatSearch.html">Cheat Search</a><span class="rvts6"> dialog. &nbsp;However, it features many options that are lacking in the Cheat Search dialog. &nbsp;Among these are search undo, search preview, a modulus filter, a data size option, signed/unsigned/hex options, autosearch, and several more compare by options.</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">Documentation on this dialog can be found on TASVideos </span><a class="rvts66" href="http://tasvideos.org/EmulatorResources/RamWatch.html" target="_blank">here</a><span class="rvts6">.</span></p>
<p class="rvps2"><span class="rvts6">Documentation on this dialog can be found on TASVideos </span><a class="rvts67" href="http://tasvideos.org/EmulatorResources/RamWatch.html" target="_blank">here</a><span class="rvts6">.</span></p>
<p></p>
<p class="rvps4" style="clear: both;"><span class="rvts18">Created with the Personal Edition of HelpNDoc: </span><a class="rvts19" href="https://www.helpndoc.com/feature-tour/create-ebooks-for-amazon-kindle">Produce Kindle eBooks easily</a></p>

View File

@ -188,10 +188,10 @@
<p class="rvps2"><span class="rvts22">TAS Editor</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">TAS Editor is an overhaul in the logic of creating TAS movies (see </span><a class="rvts69" href="ToolAssistedSpeedruns.html">Tool Assisted Speedruns</a><span class="rvts6">). It is a powerful new design that takes movie making from a "recording" concept to a "creating an input file" way of thinking.</span></p>
<p class="rvps2"><span class="rvts6">TAS Editor is an overhaul in the logic of creating TAS movies (see </span><a class="rvts70" href="ToolAssistedSpeedruns.html">Tool Assisted Speedruns</a><span class="rvts6">). It is a powerful new design that takes movie making from a "recording" concept to a "creating an input file" way of thinking.</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">In the 2.2.0 release the TAS Editor was completely redesigned and rewritten, incorporating new experimental ideas.</span></p>
<p class="rvps2"><span class="rvts6">Now it also has its own Manual, see </span><span class="rvts45">taseditor.chm</span><span class="rvts6"> or </span><a class="rvts69" href="http://www.fceux.com/web/help/taseditor/" target="_blank">fceux.com/web/help/taseditor/</a></p>
<p class="rvps2"><span class="rvts6">Now it also has its own Manual, see </span><span class="rvts45">taseditor.chm</span><span class="rvts6"> or </span><a class="rvts70" href="http://www.fceux.com/web/help/taseditor/" target="_blank">fceux.com/web/help/taseditor/</a></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">The tool is only available in Windows version of FCEUX.</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>

View File

@ -185,7 +185,7 @@
<div class="main-content">
<p></p>
<p class="rvps2"><span class="rvts87">Trace Logger</span></p>
<p class="rvps2"><span class="rvts88">Trace Logger</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts21">Introduction</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
@ -198,7 +198,7 @@
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">Normally, when logging to window, the Tracer only shows the log if you pause emulator by Pause or Frame Advance hotkey, or by snapping the Debugger. But there is the option to automatically update the log window while the game runs - this is normally useless, unless it is working with the Code/Data Logger to only show newly-executed instructions.</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">When the code is logged to window, you can browse it using mouse wheel or vertical scrollbar. Double-clicking any address in this window will bring the </span><a class="rvts88" href="Debugger.html">Debugger</a><span class="rvts6"> window at this address. Right-clicking any address allows you to label the address (see Symbolic Debug).</span></p>
<p class="rvps2"><span class="rvts6">When the code is logged to window, you can browse it using mouse wheel or vertical scrollbar. Double-clicking any address in this window will bring the </span><a class="rvts89" href="Debugger.html">Debugger</a><span class="rvts6"> window at this address. Right-clicking any address allows you to label the address (see Symbolic Debug).</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">You can customize the format of text output in the log:</span></p>
<ul style="text-indent: 0px; padding: 0; margin: 0 0 0 24px; list-style-position: outside; list-style-type: disc;">
@ -206,7 +206,7 @@
<li class="rvps2"><span class="rvts6">whether to log current frame number, cycles counter, instructions counter</span></li>
<li class="rvps2"><span class="rvts6">whether to log emulator messages (such as "State 1 loaded")</span></li>
<li class="rvps2"><span class="rvts6">whether to log Breakpoint Hits (when you use debugger while tracing)</span></li>
<li class="rvps2"><span class="rvts6">whether to apply Symbolic Debug names when logging. See </span><a class="rvts88" href="Debugger.html">Debugger</a><span class="rvts6"> section for details</span></li>
<li class="rvps2"><span class="rvts6">whether to apply Symbolic Debug names when logging. See </span><a class="rvts89" href="Debugger.html">Debugger</a><span class="rvts6"> section for details</span></li>
</ul>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">For nice visualization of JSRs nesting you can use Stack Pointer for lines tabbing. Since NES games mostly use stack for subroutine calls (and rarely store variables in the stack), this option will likely produce a more readable disassembly. With this option you may also want to put registers data to the left from disassembly text, so they won't be tabbed.</span></p>

View File

@ -200,35 +200,55 @@
<ul style="text-indent: 0px; padding: 0; margin: 0 0 0 24px; list-style-position: outside; list-style-type: disc;">
<li class="rvps5"><span class="rvts27">Added Mapper 111 cheapocabra</span></li>
<li class="rvps5"><span class="rvts27">Added Mapper 190</span></li>
<li class="rvps5"><span class="rvts27">Added RAM Init Options: default (00 00 00 00 FF FF FF FF as always), all FF, all 00, random.</span></li>
<li class="rvps5"><span class="rvts27">Added RAM Init Options: default (00 00 00 00 FF FF FF FF as always), all FF, all 00, random</span></li>
<li class="rvps5"><span class="rvts27">New UNIF mappers</span></li>
<li class="rvps5"><span class="rvts27">Mapper 30 4-screen support</span></li>
<li class="rvps5"><span class="rvts27">Mapper 5 MMC5 large WRAM support</span></li>
<li class="rvps5"><span class="rvts27">VRC7 patch set finalized with correct values dumped by Nuke.YKT</span></li>
<li class="rvps5"><span class="rvts27">Fixed rendering and debugging of mirrored palette entries</span></li>
</ul>
<p class="rvps5"><span class="rvts28"><br/></span></p>
<p class="rvps5"><span class="rvts28">Lua</span></p>
<ul style="text-indent: 0px; padding: 0; margin: 0 0 0 24px; list-style-position: outside; list-style-type: disc;">
<li class="rvps5"><span class="rvts27">Various improvements and bug fixes to pre-existing functions</span></li>
<li class="rvps5"><span class="rvts27">Fix parsing of lua colors over 0x80000000 on 32bits systems</span></li>
<li class="rvps5"><span class="rvts27">Extra colors available to lua overlays</span></li>
<li class="rvps5"><span class="rvts27">Lua write callbacks: adding optional third parameter to retrieve the value written</span></li>
<li class="rvps5"><span class="rvts27">Added Sprites.lua script to visualize sprites</span></li>
<li class="rvps5"><span class="rvts27">Zapper control</span></li>
</ul>
<p class="rvps5"><span class="rvts30"><br/></span></p>
<p class="rvps5"><span class="rvts30">New Lua functions:</span></p>
<p class="rvps2"><span class="rvts28">New Lua functions</span></p>
<ul style="text-indent: 0px; padding: 0; margin: 0 0 0 24px; list-style-position: outside; list-style-type: disc;">
<li class="rvps5"><span class="rvts27">emu.exit()</span></li>
<li class="rvps5"><span class="rvts27">rom.getfilename()</span></li>
<li class="rvps5"><span class="rvts27">zapper.set(table input)</span></li>
</ul>
<p class="rvps5"><span class="rvts28"><br/></span></p>
<p class="rvps5"><span class="rvts28">Win32</span></p>
<ul style="text-indent: 0px; padding: 0; margin: 0 0 0 24px; list-style-position: outside; list-style-type: disc;">
<li class="rvps5"><span class="rvts27">Various GUI improvements and bug fixes</span></li>
<li class="rvps5"><span class="rvts27">Fixed font rescaling issue</span></li>
<li class="rvps5"><span class="rvts27">Relative position mouse support for better fullscreen mouse capture</span></li>
<li class="rvps5"><span class="rvts27">Left and right mouse buttons no longer conflict with each other</span></li>
<li class="rvps5"><span class="rvts27">Virtual boy controller</span></li>
<li class="rvps5"><span class="rvts27">Fixed silly quit message randomizer</span></li>
<li class="rvps5"><span class="rvts27">Fixed NTSC filter null pointer crash when closing, NTSC filter now supports emphasis</span></li>
<li class="rvps5"><span class="rvts27">Sound output is now 48000 Hz by default</span></li>
<li class="rvps5"><span class="rvts27">Improve error message for invalid ROM file</span></li>
</ul>
<p class="rvps5"><span class="rvts28"><br/></span></p>
<p class="rvps5"><span class="rvts29">Debugger</span></p>
<ul style="text-indent: 0px; padding: 0; margin: 0 0 0 24px; list-style-position: outside; list-style-type: disc;">
<li class="rvps5"><span class="rvts27">Added memory read/write conditional breakpoint capability.</span></li>
<li class="rvps5"><span class="rvts27">Added illegal opcode support for breakpoints.</span></li>
<li class="rvps5"><span class="rvts27">Added memory read/write conditional breakpoint capability</span></li>
<li class="rvps5"><span class="rvts27">Added illegal opcode support for breakpoints</span></li>
<li class="rvps5"><span class="rvts27">Support for 'S' register in conditional debugger breakpoints</span></li>
<li class="rvps5"><span class="rvts27">Syntax highlight of disassembly</span></li>
<li class="rvps5"><span class="rvts27">Fixed corruption of PPU reset while debugging</span></li>
<li class="rvps5"><span class="rvts27">Attribute mode for nametable viewer</span></li>
<li class="rvps5"><span class="rvts27">Greyscale palettes for PPU and nametable viewers</span></li>
<li class="rvps5"><span class="rvts27">Fixed transparent sprite palette display in PPU viewer</span></li>
<li class="rvps5"><span class="rvts27">Fixed accidental filtering of special symbols</span></li>
</ul>
<p class="rvps5"><span class="rvts29"><br/></span></p>
<p class="rvps5"><span class="rvts29">Trace Logger</span></p>
@ -250,6 +270,11 @@
<li class="rvps5"><span class="rvts27">Prevent middle mouse button from attempting to "FreezeRam" when not in RAM mode</span></li>
<li class="rvps5"><span class="rvts27">Added Load from file feature</span></li>
</ul>
<p class="rvps5"><span class="rvts29"><br/></span></p>
<p class="rvps5"><span class="rvts29">iNES Header Editor</span></p>
<ul style="text-indent: 0px; padding: 0; margin: 0 0 0 24px; list-style-position: outside; list-style-type: disc;">
<li class="rvps5"><span class="rvts27">A new tool which can edit the iNES header of ROM files</span></li>
</ul>
<p class="rvps5"><span class="rvts28"><br/></span></p>
<p class="rvps5"><span class="rvts28">TAS Editor</span></p>
<ul style="text-indent: 0px; padding: 0; margin: 0 0 0 24px; list-style-position: outside; list-style-type: disc;">
@ -258,9 +283,9 @@
<p class="rvps5"><span class="rvts28"><br/></span></p>
<p class="rvps5"><span class="rvts28">SDL</span></p>
<ul style="text-indent: 0px; padding: 0; margin: 0 0 0 24px; list-style-position: outside; list-style-type: disc;">
<li class="rvps5"><span class="rvts27">GUI completely rewritten using Qt5. Replaces old GTK GUI.</span></li>
<li class="rvps5"><span class="rvts27">New Qt GUI now contains most of the debug tools that previously only existed in windows version.</span></li>
<li class="rvps5"><span class="rvts27">Build setup migrated to cmake. Replaces scons build setup.</span></li>
<li class="rvps5"><span class="rvts27">GUI completely rewritten using Qt5. Replaces old GTK GUI</span></li>
<li class="rvps5"><span class="rvts27">New Qt GUI now contains most of the debug tools that previously only existed in windows version</span></li>
<li class="rvps5"><span class="rvts27">Build setup migrated to cmake. Replaces scons build setup</span></li>
</ul>
<p class="rvps2"><span class="rvts31"><br/></span></p>
<p></p>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -4,10 +4,10 @@
<head>
<title>Redirecting to "Famicom Disk System"</title>
<link rel="canonical" href="../FamicomDiskSytem.html" />
<link rel="canonical" href="../FamicomDiskSystem.html" />
<meta name="robots" content="noindex">
<meta charset="utf-8" />
<meta http-equiv="refresh" content="0; url=../FamicomDiskSytem.html" />
<meta http-equiv="refresh" content="0; url=../FamicomDiskSystem.html" />
</head>
</html>

View File

@ -401,10 +401,6 @@ a.rvts65, span.rvts65
color: #0000ff;
text-decoration: underline;
}
a.rvts65:hover
{
color: #0000ff;
}
a.rvts66, span.rvts66
{
color: #0000ff;
@ -423,21 +419,21 @@ a.rvts67:hover
{
color: #0000ff;
}
span.rvts68
a.rvts68, span.rvts68
{
color: #0000ff;
text-decoration: underline;
}
a.rvts68:hover
{
color: #0000ff;
}
span.rvts69
{
font-size: 12pt;
font-weight: bold;
text-decoration: underline;
}
a.rvts69, span.rvts69
{
color: #0000ff;
text-decoration: underline;
}
a.rvts69:hover
{
color: #0000ff;
}
a.rvts70, span.rvts70
{
color: #0000ff;
@ -456,28 +452,28 @@ a.rvts71:hover
{
color: #0000ff;
}
span.rvts72
{
font-size: 11pt;
font-weight: bold;
}
span.rvts73
{
font-size: 8pt;
}
span.rvts74
{
color: #000000;
}
a.rvts75, span.rvts75
a.rvts72, span.rvts72
{
color: #0000ff;
text-decoration: underline;
}
a.rvts75:hover
a.rvts72:hover
{
color: #0000ff;
}
span.rvts73
{
font-size: 11pt;
font-weight: bold;
}
span.rvts74
{
font-size: 8pt;
}
span.rvts75
{
color: #000000;
}
a.rvts76, span.rvts76
{
color: #0000ff;
@ -487,60 +483,60 @@ a.rvts76:hover
{
color: #0000ff;
}
span.rvts77
a.rvts77, span.rvts77
{
color: #0000ff;
text-decoration: underline;
}
a.rvts77:hover
{
color: #0000ff;
}
span.rvts78
{
color: #00cc00;
color: #0000ff;
}
span.rvts79
{
color: #ff0000;
color: #00cc00;
}
span.rvts80
{
color: #00be00;
color: #ff0000;
}
span.rvts81
{
color: #a08c00;
color: #00be00;
}
span.rvts82
{
color: #0000c3;
color: #a08c00;
}
span.rvts83
{
color: #0082a0;
color: #0000c3;
}
span.rvts84
{
color: #d2be00;
color: #0082a0;
}
span.rvts85
{
color: #0a0aff;
color: #d2be00;
}
span.rvts86
{
color: #05ff05;
color: #0a0aff;
}
span.rvts87
{
color: #05ff05;
}
span.rvts88
{
font-size: 22pt;
text-decoration: underline;
}
a.rvts88, span.rvts88
{
color: #0000ff;
text-decoration: underline;
}
a.rvts88:hover
{
color: #0000ff;
}
a.rvts89, span.rvts89
{
color: #0000ff;
@ -559,116 +555,120 @@ a.rvts90:hover
{
color: #0000ff;
}
span.rvts91
a.rvts91, span.rvts91
{
color: #0000ff;
text-decoration: underline;
}
a.rvts91:hover
{
color: #0000ff;
}
span.rvts92
{
font-weight: bold;
color: #ff0000;
}
span.rvts93
{
font-weight: bold;
color: #ff0000;
background-color: #ffffff;
}
span.rvts94
{
font-size: 18pt;
font-weight: bold;
}
a.rvts92, span.rvts92
a.rvts95, span.rvts95
{
color: #0000ff;
text-decoration: underline;
}
a.rvts92:hover
a.rvts95:hover
{
color: #0000ff;
}
a.rvts93, span.rvts93
a.rvts96, span.rvts96
{
color: #0000ff;
text-decoration: underline;
}
a.rvts93:hover
a.rvts96:hover
{
color: #0000ff;
}
span.rvts94
{
font-size: 12pt;
font-family: 'Courier New', 'Courier', monospace;
font-weight: bold;
}
span.rvts95
{
font-size: 14pt;
font-weight: bold;
}
span.rvts96
{
font-size: 12pt;
font-family: 'Courier New', 'Courier', monospace;
color: #000080;
}
span.rvts97
{
font-size: 12pt;
font-family: 'Courier New', 'Courier', monospace;
color: #333399;
font-weight: bold;
}
span.rvts98
{
font-size: 14pt;
font-weight: bold;
}
span.rvts99
{
font-size: 12pt;
font-family: 'Courier New', 'Courier', monospace;
color: #000080;
}
span.rvts100
{
font-size: 12pt;
font-family: 'Courier New', 'Courier', monospace;
color: #333399;
}
span.rvts101
{
font-family: 'Courier New', 'Courier', monospace;
color: #000080;
}
span.rvts99
span.rvts102
{
font-size: 16pt;
font-family: 'Courier New', 'Courier', monospace;
font-weight: bold;
}
span.rvts100
span.rvts103
{
font-size: 11pt;
font-family: 'Courier New', 'Courier', monospace;
font-weight: bold;
}
span.rvts101
span.rvts104
{
font-family: 'Courier New', 'Courier', monospace;
font-weight: bold;
}
span.rvts102
span.rvts105
{
font-size: 12pt;
font-family: 'Courier New', 'Courier', monospace;
color: #000080;
}
a.rvts103, span.rvts103
a.rvts106, span.rvts106
{
font-family: 'Courier New', 'Courier', monospace;
color: #0000ff;
text-decoration: underline;
}
a.rvts103:hover
a.rvts106:hover
{
color: #0000ff;
}
span.rvts104
{
font-size: 14pt;
font-weight: bold;
}
span.rvts105
{
font-family: 'Courier New', 'Courier', monospace;
font-weight: bold;
text-decoration: underline;
}
span.rvts106
{
font-size: 12pt;
font-family: 'Courier New', 'Courier', monospace;
color: #00007f;
}
span.rvts107
{
font-size: 14pt;
font-family: 'Courier New', 'Courier', monospace;
font-weight: bold;
}
span.rvts108
{
font-size: 12pt;
font-family: 'Courier New', 'Courier', monospace;
font-weight: bold;
text-decoration: underline;
}
span.rvts109
{
@ -678,33 +678,49 @@ span.rvts109
}
span.rvts110
{
font-size: 14pt;
font-family: 'Courier New', 'Courier', monospace;
color: ;
}
span.rvts111
{
color: ;
font-size: 12pt;
font-family: 'Courier New', 'Courier', monospace;
}
span.rvts112
{
font-size: 12pt;
font-family: 'Courier New', 'Courier', monospace;
color: #00007f;
}
span.rvts113
{
font-family: 'Courier New', 'Courier', monospace;
color: ;
}
span.rvts114
{
color: ;
}
span.rvts115
{
font-family: 'Lucida Console', 'Monaco', monospace;
text-decoration: underline;
}
span.rvts113
span.rvts116
{
font-weight: bold;
text-decoration: underline;
}
span.rvts114
span.rvts117
{
font-size: 11pt;
text-decoration: underline;
}
span.rvts115
span.rvts118
{
font-size: 5pt;
}
span.rvts116
span.rvts119
{
font-size: 5pt;
font-weight: bold;

File diff suppressed because one or more lines are too long

View File

@ -219,41 +219,41 @@
<p class="rvps2"><span class="rvts6">Integer keys (also used for booleans, with a 1 for true and 0 for false) must have a value that can be stored as int32:</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">&nbsp;</span><span class="rvts45">- version</span><span class="rvts6"> (required) - the version of the movie file format; for now it is always 3</span></p>
<p class="rvps2"><span class="rvts115"><br/></span></p>
<p class="rvps2"><span class="rvts118"><br/></span></p>
<p class="rvps2"><span class="rvts6">&nbsp;</span><span class="rvts45">- emuVersion</span><span class="rvts6"> (required) - the version of the emulator used to produce the movie</span></p>
<p class="rvps2"><span class="rvts115"><br/></span></p>
<p class="rvps2"><span class="rvts118"><br/></span></p>
<p class="rvps2"><span class="rvts6">&nbsp;</span><span class="rvts45">- rerecordCount</span><span class="rvts6"> (optional) - the rerecord count</span></p>
<p class="rvps2"><span class="rvts115"><br/></span></p>
<p class="rvps2"><span class="rvts118"><br/></span></p>
<p class="rvps2"><span class="rvts6">&nbsp;-</span><span class="rvts45"> palFlag</span><span class="rvts6"> (bool) (optional) - true if the movie uses PAL timing</span></p>
<p class="rvps2"><span class="rvts115"><br/></span></p>
<p class="rvps2"><span class="rvts118"><br/></span></p>
<p class="rvps2"><span class="rvts6">&nbsp;-</span><span class="rvts45"> NewPPU</span><span class="rvts6"> (bool) (optional) - true if the movie uses New PPU</span></p>
<p class="rvps2"><span class="rvts115"><br/></span></p>
<p class="rvps2"><span class="rvts118"><br/></span></p>
<p class="rvps2"><span class="rvts6">&nbsp;</span><span class="rvts45">- FDS</span><span class="rvts6"> (bool) (optional) - true if movie was recorded on a Famicom Disk System (FDS) game</span></p>
<p class="rvps2"><span class="rvts115"><br/></span></p>
<p class="rvps2"><span class="rvts118"><br/></span></p>
<p class="rvps2"><span class="rvts6">&nbsp;</span><span class="rvts45">- fourscore</span><span class="rvts6"> (bool) - true if a fourscore was used. If fourscore is not used, then port0 and port1 are required</span></p>
<p class="rvps2"><span class="rvts115"><br/></span></p>
<p class="rvps2"><span class="rvts118"><br/></span></p>
<p class="rvps2"><span class="rvts6">&nbsp;</span><span class="rvts45">- port0 </span><span class="rvts6">- indicates the type of input device attached to the port 0. Supported values are:</span></p>
<p class="rvps2"><span class="rvts6">&nbsp; &nbsp; &nbsp;SI_NONE = 0</span></p>
<p class="rvps2"><span class="rvts6">&nbsp; &nbsp; &nbsp;SI_GAMEPAD = 1</span></p>
<p class="rvps2"><span class="rvts6">&nbsp; &nbsp; &nbsp;SI_ZAPPER = 2</span></p>
<p class="rvps2"><span class="rvts115"><br/></span></p>
<p class="rvps2"><span class="rvts118"><br/></span></p>
<p class="rvps2"><span class="rvts6">&nbsp;</span><span class="rvts45">- port1</span><span class="rvts6"> - indicates the type of input device attached to the port 1. Supported values are:</span></p>
<p class="rvps2"><span class="rvts6">&nbsp; &nbsp; &nbsp;SI_NONE = 0</span></p>
<p class="rvps2"><span class="rvts6">&nbsp; &nbsp; &nbsp;SI_GAMEPAD = 1</span></p>
<p class="rvps2"><span class="rvts6">&nbsp; &nbsp; &nbsp;SI_ZAPPER = 2</span></p>
<p class="rvps2"><span class="rvts115"><br/></span></p>
<p class="rvps2"><span class="rvts118"><br/></span></p>
<p class="rvps2"><span class="rvts45">&nbsp;- port2</span><span class="rvts6"> (required) - indicates the type of the FCExp port device which was attached. Supported values are:</span></p>
<p class="rvps2"><span class="rvts6">&nbsp; &nbsp; &nbsp;SIFC_NONE = 0</span></p>
<p class="rvps2"><span class="rvts115"><br/></span></p>
<p class="rvps2"><span class="rvts118"><br/></span></p>
<p class="rvps2"><span class="rvts6">&nbsp;</span><span class="rvts45">- binary</span><span class="rvts6"> (bool) (optional) - true if input log is stored in binary format</span></p>
<p class="rvps2"><span class="rvts115"><br/></span></p>
<p class="rvps2"><span class="rvts6">&nbsp;</span><span class="rvts45">- length</span><span class="rvts6"> (optional) - movie size (number of frames in the input log). If this key is specified and the number is &gt;= 0, the input log ends after specified number of records, and any remaining data should not be parsed. This key is used in </span><span class="rvts113">fm3</span><span class="rvts6"> format to allow storing extra data after the end of input log</span></p>
<p class="rvps2"><span class="rvts118"><br/></span></p>
<p class="rvps2"><span class="rvts6">&nbsp;</span><span class="rvts45">- length</span><span class="rvts6"> (optional) - movie size (number of frames in the input log). If this key is specified and the number is &gt;= 0, the input log ends after specified number of records, and any remaining data should not be parsed. This key is used in </span><span class="rvts116">fm3</span><span class="rvts6"> format to allow storing extra data after the end of input log</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">String keys have values that consist of the remainder of the key-value pair line. As a consequence, string values cannot contain newlines.</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts45">&nbsp;- romFilename</span><span class="rvts6"> (required) - the name of the file used to record the movie</span></p>
<p class="rvps2"><span class="rvts115"><br/></span></p>
<p class="rvps2"><span class="rvts118"><br/></span></p>
<p class="rvps2"><span class="rvts45">&nbsp;- comment </span><span class="rvts6">(optional) - simply a memo</span></p>
<ul style="text-indent: 0px; padding: 0; margin: 0 0 0 36px; list-style-position: outside; list-style-type: circle;">
<li class="rvps2"><span class="rvts6">by convention, the first token in the comment value is the subject of the comment</span></li>
@ -264,7 +264,7 @@
<ul style="text-indent: 0px; padding: 0; margin: 0 0 0 24px; list-style-position: outside;">
<li class="rvps2"><span class="rvts6">comment author adelikat</span></li>
</ul>
<p class="rvps2"><span class="rvts115"><br/></span></p>
<p class="rvps2"><span class="rvts118"><br/></span></p>
<p class="rvps2"><span class="rvts45">&nbsp;- subtitle </span><span class="rvts6">(optional) - a message that will be displayed on screen when movie is played back (unless Subtitles are turned off, see </span><a class="rvts23" href="MovieOptions.html">Movie options</a><span class="rvts6">)</span></p>
<ul style="text-indent: 0px; padding: 0; margin: 0 0 0 36px; list-style-position: outside; list-style-type: circle;">
<li class="rvps2"><span class="rvts6">by convention, subtitles begin with the word "subtitle"</span></li>
@ -276,12 +276,12 @@
<li class="rvps2"><span class="rvts6">subtitle 1000 Level Two</span></li>
</ul>
<p class="rvps2"><span class="rvts6">At frame 1000 the words "Level Two" will be displayed on the screen</span></p>
<p class="rvps2"><span class="rvts115"><br/></span></p>
<p class="rvps2"><span class="rvts118"><br/></span></p>
<p class="rvps2"><span class="rvts45">&nbsp;- guid </span><span class="rvts6">(required) - a unique identifier for a movie, generated when the movie is created, which is used when loading a savestate to make sure it belongs to the current movie</span></p>
<p class="rvps2"><span class="rvts6">GUID keys have a value which is in the standard guide format: 452DE2C3-EF43-2FA9-77AC-0677FC51543B</span></p>
<p class="rvps2"><span class="rvts116"><br/></span></p>
<p class="rvps2"><span class="rvts119"><br/></span></p>
<p class="rvps2"><span class="rvts45">&nbsp;- romChecksum </span><span class="rvts6">(required) - the base64 of the hexified MD5 hash of the ROM which was used to record the movie</span></p>
<p class="rvps2"><span class="rvts115"><br/></span></p>
<p class="rvps2"><span class="rvts118"><br/></span></p>
<p class="rvps2"><span class="rvts45">&nbsp;- savestate </span><span class="rvts6">(optional) - a </span><a class="rvts23" href="fcs.html">fcs</a><span class="rvts6"> savestate blob, in case a movie was recorded from savestate &nbsp;</span></p>
<p class="rvps2"><span class="rvts6">Hex string keys (used for binary blobs) have a value that is like 0x0123456789ABCDEF...</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
@ -291,11 +291,11 @@
<p class="rvps2"><span class="rvts6">The input log section consists of movie records either in the form of text lines or in the form of binary data.</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts114">Text format (default format):</span></p>
<p class="rvps2"><span class="rvts117">Text format (default format):</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">Every frame of the movie is represented by line of text beginning and ending with a | (pipe).</span></p>
<p class="rvps2"><span class="rvts6">The fields in the line are as follows, except when fourscore is used.</span></p>
<p class="rvps2"><span class="rvts72">|commands|port0|port1|port2|</span></p>
<p class="rvps2"><span class="rvts73">|commands|port0|port1|port2|</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">Field </span><span class="rvts45">commands</span><span class="rvts6"> is a variable length decimal integer which is interpreted as a bit field corresponding to miscellaneous input states which are valid at the start of the frame. Current values for this are:</span></p>
<ul style="text-indent: 0px; padding: 0; margin: 0 0 0 24px; list-style-position: outside; list-style-type: disc;">
@ -332,11 +332,11 @@
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">If a </span><span class="rvts45">fourscore</span><span class="rvts6"> is used, then port0 and port1 are irrelevant and ignored.</span></p>
<p class="rvps2"><span class="rvts6">The input types must all be gamepads, and each input log record must be in the following format:</span></p>
<p class="rvps2"><span class="rvts72">|commands|RLDUTSBA|RLDUTSBA|RLDUTSBA|RLDUTSBA|port2|</span></p>
<p class="rvps2"><span class="rvts73">|commands|RLDUTSBA|RLDUTSBA|RLDUTSBA|RLDUTSBA|port2|</span></p>
<p class="rvps2"><span class="rvts6">{commands, player1, player2, player3, player4, port2}</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts114">Binary format:</span></p>
<p class="rvps2"><span class="rvts117">Binary format:</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">Input log section starts with a | (pipe).</span></p>
<p class="rvps2"><span class="rvts6">Every frame of the movie is represented by a record of a fixed length which can be determined by the devices on port0 and port1.</span></p>

File diff suppressed because one or more lines are too long