Don't offer horizontal scale factor as value of verical factor
[lsnes.git] / manual.txt
blobeb012caa65ab50147fb4b7bf6c389bcf694da1c0
1 1 Introduction
3 lsnes is SNES rerecording emulator based on bsnes core.
5 2 Dependencies
7 1. bsnes libsnes (for bsnes SNES core)
9   (a) v084-v087 (v084 or v085 for delayreset support)
11   (b) accuracy or compatiblity core with debugger enabled.
13   (c) Patched version (using included 7 patches)
15 2. gambatte (for gambatte core)
17   (a) SVN r320, r358 or r364
19   (b) Patched with included patches
21 3. Zlib
23 4. boost_iostreams
25 5. boost_filesystem
27 6. boost_thread (if native std::thread is not available)
29 7. libsdl (SDL only)
31 8. sdlmain (SDL only, part of SDL)
33 9. boost_conversion (this is header-only library)
35 10. libswscale (wxwidgets graphics only)
37 11. Portaudio (portaudio sound only)
39 12. libao (libao sound only)
41 13. Lua version 5.1.X or 5.2.X
43 14. G++ 4.6 or 4.7
45 15. libopus (optional, for commentary track tool)
47 3 Building
49 • Copy bsnes sources (the bsnes subdirectory) to subdirectory 
50   'bsnes' (for bsnes core).
52 • Copy gambatte sources to subdirectory 'gambatte' (for gambatte 
53   core).
55 • Patch the bsnes sources with included patches (directory 
56   'bsnes-patches/<version>', bsnes core)
58 • Patch the gambatte sources with included patches (directory 
59   'gambatte-patches/<version>', gambatte core)
61 • Edit options.build (or copy of that file)
63 • Run make (passing 'OPTIONS=<filename>' if using something else 
64   than options.build).
66 4 Command line options
68 4.1 Wxwidgets options
70 4.1.1 --rom=<file>
72 Load <file> as ROM.
74 4.1.2 <file>
76 Load <file> as ROM.
78 4.1.3 --load=<file>
80 Load <file> as movie or savestate file on startup.
82 4.1.4 --settings
84 Instead of starting the emulator, only display the settings.
86 4.1.5 --lua=<file>
88 Run this Lua file on startup
90 4.2 dump options (lsnes-dumpavi only)
92 4.2.1 --rom=<file>
94 Load <file> as ROM. Required.
96 4.2.2 <filename>
98 Load <filename> as movie or savestate file on startup. Required.
100 4.2.3 --dumper=<dumper>
102 Set the dumper to use (required). Use 'list' for listing of known 
103 dumpers.
105 4.2.4 --firmware-path=<path>
107 Set path to look for firmware.
109 4.2.5 --mode=<mode>
111 Set the mode to use (required for dumpers with multiple modes, 
112 forbidden otherwise). Use 'list' for known modes.
114 4.2.6 --prefix=<prefix>
116 Set dump prefix. Default is “avidump”.
118 4.2.7 --option=<name>=<value>
120 Set option <name> to value <value>.
122 4.2.8 --length=<length>
124 Set number of frames to dump. Mandatory.
126 4.2.9 --lua=<script>
128 Run specified lua script (lsnes-dumpavi does not have 
129 initialization files).
131 4.2.10 --load-library=<library>
133 Load the specified shared object / dynamic library / dynamic link 
134 library.
136 4.3 lsnes settings directory
138 The lsnes settings directory is (in order of decreasing 
139 perference):
141 • Windows: %APPDATA%\lsnes (if %APPDATA% exists)
143 • Unix: $XDG_CONFIG_HOME/lsnes (if $XDG_CONFIG_HOME exists)
145 • Unix: $HOME/.config/lsnes (if $HOME exists)
147 • All: . (fallback default).
149 If leading directories do not exist, attempt to create them is 
150 made.
152 5 Internal commands
154 • Commands beginning with '*' invoke the corresponding command 
155   without alias expansion.
157 • If command starts with '+' (after possible '*'), the command is 
158   executed as-is when button is pressed, and when button is 
159   released, it is executed with '+' replaced by '-'.
161 • Commands without '+' execute only on negative edge (release).
163 5.1 run-script <script>
165 Run <script> as if commands were entered on the command line.
167 5.2 Memory manipulation
169 <address> may be decimal or hexadecimal (prefixed with '0x'). 
170 <value> can be hexadecimal (prefixed with '0x'), unsigned or 
171 signed (prefixed with '-') decimal.
173 The available element <sizes> are:
175 • byte: 1 byte
177 • word: 2 bytes
179 • dword: 4 bytes
181 • qword: 8 bytes
183 When reading RAM and ROM, multi-byte reads/writes are big-endian. 
184 When dealing with DSP memory, multi-byte reads/writes are 
185 native-endian (do not use operand sizes exceeding DSP bitness, 
186 except dword is OK for 24-bit memory).
188 5.2.1 read-<size> <address>
190 Read the value of byte in <address>.
192 5.2.2 read-s<size> <address>
194 Read the value of signed byte in <address>.
196 5.2.3 write-<size> <address> <value>
198 Write <value> to byte in address <address>.
200 5.3 Main commands
202 These commands are not available in lsnesrc, but are available 
203 after ROM has been loaded.
205 5.3.1 quit-emulator
207 Quits the emulator.
209 5.3.2 pause-emulator
211 Toggle paused/unpaused
213 5.3.3 +advance-frame 
215 Advance frame. If the button is still held after configurable 
216 timeout expires, game unpauses for the duration frame advance is 
217 held.
219 5.3.4 +advance-poll 
221 Advance subframe. If the button is still held after configurable 
222 timeout expires, game unpauses for the duration frame advance is 
223 held.
225 5.3.5 advance-skiplag 
227 Skip to first poll in frame after current.
229 5.3.6 reset 
231 Reset the SNES after this frame.
233 5.3.7 load <filename> 
235 Load savestate <filename> in current mode.
237 5.3.8 load-state <filename> 
239 Load savestate <filename> in readwrite mode.
241 5.3.9 load-readonly <filename> 
243 Load savestate <filename> in readonly mode.
245 5.3.10 load-preserve <filename> 
247 Load savestate <filename> in readonly mode, preserving current 
248 events.
250 5.3.11 load-movie <filename> 
252 Load savestate <filename>, ignoring save part in readonly mode.
254 5.3.12 save-state <filename> 
256 Save system state to <filename> as soon as possible.
258 5.3.13 save-movie <filename> 
260 Save movie to <filename>.
262 5.3.14 set-rwmode 
264 Set read-write mode.
266 5.3.15 set-romode 
268 Set read-only mode
270 5.3.16 toggle-rwmode 
272 Toggle between read-only and read-write modes.
274 5.3.17 test-1, test-2, test-3
276 Internal test commands. Don't use.
278 5.3.18 take-screenshot <filename> 
280 Save screenshot to <filename>.
282 5.3.19 +controller <class>-<#>-<button>
284 Press button <button> on controller <num> of class <class>.
286 • Class 'gamepad': A, B, X, Y, L, R, select, start, up, down, 
287   left, right, ext0, ext1, ext2, ext3
289 • Class 'mouse': L, R
291 • Class 'superscope': trigger, cursor, turbo, pause
293 • Class 'justifier': trigger, start
295 • Class 'gb': A, B, select, start, up, down, left, right
297 5.3.20 hold-controller <class>-<#>-<button>
299 Hold/unhold button <button> on controller <num> of class <class>.
301 5.3.21 type-controller <class>-<#>-<button>
303 Hold/unhold button <button> on controller <num> of class <class> 
304 for the next frame. See +controller for button names.
306 Cauntion: Does not work properly if outside frame advance.
308 5.3.22 +autofire-controller <class>-<#>-<button> [[<duty>] 
309   <cyclelen>]
311 Start autofire. If duty is not specified, defaults to 1. If 
312 <cyclelen> is not specified, defaults to 2.
314 5.3.23 -autofire-controller <class>-<#>-<button> [[<duty>] 
315   <cyclelen>]
317 End autofire.
319 5.3.24 autofire-controller <class>-<#>-<button> [[<duty>] 
320   <cyclelen>]
322 Toggle autofire. If autofire is turned on, specified cycle is 
323 used.
325 5.3.25 designate-position <class>-<#>-analog<n>
327 Designate position for analog pair. <n> is only there if there 
328 are multiple axis pairs.
330 5.3.26 repaint
332 Force a repaint.
334 5.3.27 toggle-pause-on-end
336 Toggle pause on end flag.
338 5.3.28 set-pause-on-end
340 Set pause on end flag.
342 5.3.29 clear-pause-on-end
344 Clear pause on end flag.
346 5.3.30 action <action> [<parameters>]
348 Run specified core action.
350 5.4 Save jukebox 
352 5.4.1 cycle-jukebox-backward
354 Cycle save jukebox backwards.
356 5.4.2 cycle-jukebox-forward
358 Cycle save jukebox forwards
360 5.4.3 load-jukebox
362 Do load from jukebox (current mode).
364 5.4.4 save-jukebox
366 Do state save to jukebox.
368 5.5 Lua 
370 5.5.1 evaluate-lua <luacode>
372 Run Lua code <luacode> using built-in Lua interpretter.
374 5.5.2 L <luacode>
376 Synonym for evaluate-lua.
378 5.5.3 run-lua <script>
380 Run specified lua file using built-in Lua interpretter.
382 5.5.4 reset-lua
384 Clear the Lua VM state and restore to factory defaults.
386 5.6 Memory watch
388 5.6.1 add-watch <name> <expression>
390 Adds new watch (or modifies old one).
392 5.6.2 remove-watch <name>
394 Remove a watch.
396 5.7 Sound 
398 5.7.1 enable-sound <on/off> 
400 Enable/Disable sound.
402 5.8 Misc.
404 5.8.1 reload-rom [<file>]
406 Reloads the main ROM image from <file>.
408 5.8.2 +tangent
410 Tangent for recording voice for commentary track. While pressed, 
411 record a stream.
413 5.8.3 advance-subframe-timeout
415 Subframe advance timeout in milliseconds. Default is 100.
417 6 Settings
419 6.1 Core settings
421 6.2 AVI dumper settings
423 6.2.1 avi-large
425 AVI dumper: Always dump at 512x448 or 512x478 regardless of what 
426 the console outputs.
428 6.2.2 avi-left-border
430 AVI dumper: Set the default left border thickness (unless lua 
431 overrides) for dumps. Range 0-8191. Default is 0.
433 6.2.3 avi-right-border
435 AVI dumper: Set the default right border thickness (unless lua 
436 overrides) for dumps. Range 0-8191. Default is 0.
438 6.2.4 avi-top-border
440 AVI dumper: Set the default top border thickness (unless lua 
441 overrides) for dumps. Range 0-8191. Default is 0.
443 6.2.5 avi-bottom-border
445 AVI dumper: Set the default bottom border thickness (unless lua 
446 overrides) for dumps. Range 0-8191. Default is 0.
448 6.2.6 avi-maxframes
450 AVI dumper: Maximum number of frames per dump segment (0 => 
451 unlimited). Range 0-999999999. Default is 0.
453 6.2.7 avi-compresison
455 AVI dumper: Compression level (0-18).
457 • Compression levels 10 and above are not compatible with stock 
458   CSCD codec.
460 • Recomended level is 7.
462 6.2.8 avi-soundrate
464 AVI dumper: Set method of determining the sound rate.
466 • 0: Pick nearest of 8, 11.025, 12, 16, 22.05, 24, 32, 44.1, 48, 
467   64, 88.2, 96, 128, 176.4 and 192 kHz.
469 • 1: Round down to nearest integer.
471 • 2: Round up to nearest ingeter.
473 • 3: Multiply by denominator.
475 • 4: High quality 44.1kHz (SRC needed).
477 • 5: High quality 48kHz (SRC needed).
479 6.3 JMD options
481 6.3.1 jmd-compression
483 JMD dumper: Compression level (0-9).
485 7 Movie editor
487 • The editor edits in-memory movie.
489 • Because past can't be edited and readwrite mode doesn't allow 
490   future, editing only works in read only mode.
492 • Keyboard triggers the normal hotkeys and bindings.
494 7.1 Left button actions
496 • Clicking on cell in future (indicated by lack of redish 
497   background) toggles it (if it is a button) or prompts for a 
498   value (if it is an axis)
500 • Dragging vertically toggles sequence of buttons or changes a 
501   sequence of axis values.
503 7.2 Right button actions
505 The right mouse button pops up a context-sensitive menu:
507 • Toggle <something>: Toggle this button
509 • Change <something>: Change this axis value
511 • Insert frame after: Insert a frame after this frame
513 • Append frame: Append a frame to movie
515 • Append frames: Append specified number of frames to movie
517 • Delete frame: Delete this frame
519 • Delete subframe: Delete this subframe
521 • Truncate movie: Delete this subframe and everything after it.
523 • Scroll to frame: Prompt for a frame and scroll the display to 
524   that frame.
526 • Scroll to current frame: Scroll the display to current position
528 • Run to frame: Prompts for frame and runs the emulation to that 
529   frame.
531 • Change number of lines visible: Change the height of the movie 
532   display (1 to 255).
534 • Lock scroll to playback: While playing back or rewinding 
535   movies, the display will follow if enabled.
537 8 Memory watch expression syntax
539 Memory watch expressions are in RPN (Reverse Polish Notation). At 
540 the end of expression, the top entry on stack is taken as the 
541 final result.
543 Notations:
545 • Evaluation order is strictly left to right.
547 • a is the entry on top of stack
549 • b is the entry immediately below top of stack
551 • ; separates values to be pushed (no intermediate pop).
553 • After end of element, all used stack slots are popped and all 
554   results are pushed.
556 • When pushing multiple values, the pushes occur in order shown.
558 The following operators are available:
560 • + : a + b
562 • - : a - b
564 • * : a * b
566 • / : a / b
568 • % : a % b
570 • a : atan(a)
572 • b : read_signed_byte(a)
574 • c : cos(a)
576 • d : read_signed_dword(a)
578 • i : quotent(a / b)
580 • p :\pi
583 • q : read_signed_qword(a)
585 • r : sqrt(a)
587 • s : sin(a)
589 • t : tan(a)
591 • u : a; a
593 • w : read_signed_word(a)
595 • A : atan2(a, b)
597 • B : read_unsigned_byte(a)
599 • C<number>z : Push number <number> to stack.
601 • D : read_unsigned_dword(a)
603 • C0x<number>z : Push number <number> (hexadecimal) to stack.
605 • H<digit> : Set hexadecimal mode with specified number of digits 
606   (use A-G for 10-16 digits).
608 • Q : read_unsigned_qword(a)
610 • R<digit> : round a to <digit> digits.
612 • W : read_unsigned_word(a)
614 8.1 Example:
616 C0x007e0878zWC0x007e002czW-
618 1. Push value 0x7e0878 on top of stack (C0x007e0878z).
620 2. Pop the value on top of stack (0x7e0878), read word value at 
621   that address and push the result,call it x1 (W).
623 3. Push value 0x7e002c on top of stack (C0x007e002cz).
625 4. Pop the value on top of stack (0x7e002c), read word value at 
626   that address and push the result,call it x2 (W).
628 5. Pop the two top numbers on stack, x1 and x2, substract x1 from 
629   x2 and push x2 - x1 (-).
631 6. Since the expression ends, the final memory watch result is 
632   the top one on stack, which is x2 - x1.
634 9 Modifier and key names:
636 9.1 wxWidgets platform
638 9.1.1 Modifier names:
640 Following modifier names are known:
642 • alt
644 • ctrl
646 • shift 
648 • meta
650 • cmd (Mac OS X only)
652 9.1.2 Key names:
654 Following key names are known:
656 • back, tab, return, escape, space, exclaim, quotedbl, hash, 
657   dollar, percent, ampersand, quote, leftparen, rightparen, 
658   asterisk, plus, comma, minus, period, slash, 0, 1, 2, 3, 4, 5, 
659   6, 7, 8, 9, colon, semicolon, less, equals, greater, question, 
660   at, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, 
661   u, v, w, x, y, z, leftbracket, backslash, rightbracket, caret, 
662   underscore, backquote, a, b, c, d, e, f, g, h, i, j, k, l, m, 
663   n, o, p, q, r, s, t, u, v, w, x, y, z, leftcurly, pipe, 
664   rightcurly, tilde, delete, start, lbutton, rbutton, cancel, 
665   mbutton, clear, shift, alt, control, menu, pause, capital, end, 
666   home, lefT, up, right, down, select, print, execute, snapshot, 
667   insert, help, numpad0, numpad1, numpad2, numpad3, numpad4, 
668   numpad5, numpad6, numpad7, numpad8, numpad9, multiply, add, 
669   separator, subtract, decimal, divide, f1, f2, f3, f4, f5, f6, 
670   f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, 
671   f20, f21, f22, f23, f24, numlock, scroll, pageup, pagedown, 
672   numpad_space, numpad_tab, numpad_enter, numpad_f1, numpad_f2, 
673   numpad_f3, numpad_f4, numpad_home, numpad_left, numpad_up, 
674   numpad_right, numpad_down, numpad_pageup, numpad_pagedown, 
675   numpad_end, numpad_begin, numpad_insert, numpad_delete, 
676   numpad_equal, numpad_multiply, numpad_add, numpad_separator, 
677   numpad_subtract, numpad_decimal, numpad_divide, windows_left, 
678   windows_right, windows_menu, command, special1, special2, 
679   special3, special4, special5, special6, special7, special8, 
680   special9, special10, special11, special12, special13, 
681   special14, special15, special16, special17, special18, 
682   special19, special20
684 10 Movie file format
686 Movie file is .zip archive in itself, normal ZIP archive tools 
687 work on it (note: If you recompress it, do not use compression 
688 methods other than store and deflate and especially do not use 
689 encryption of any kind).
691 10.1 Detecting clean start/SRAM/Savestate
693 • If file has member “savestate” it is savestate, otherwise:
695 • If file has members with names starting “moviesram.” it is 
696   movie starting from SRAM, otherwise:
698 • It is movie starting from clear state.
700 10.2 Member: gametype
702 Type of game ROM and region (as one line). Valid values are:
705 +--------------+---------------------+--------+
706 |    Value     |       System        | Region |
707 +--------------+---------------------+--------+
708 +--------------+---------------------+--------+
709 |  snes_pal    |     Super NES       |  PAL   |
710 +--------------+---------------------+--------+
711 |   sgb_pal    |   Super Game Boy    |  PAL   |
712 +--------------+---------------------+--------+
713 |  snes_ntsc   |     Super NES       |  NTSC  |
714 +--------------+---------------------+--------+
715 |  sgb_ntsc    |   Super Game Boy    |  NTSC  |
716 +--------------+---------------------+--------+
717 |     bsx      | BS-X (non-slotted)  |  NTSC  |
718 +--------------+---------------------+--------+
719 | bsxslotted   |   BS-X (slotted)    |  NTSC  |
720 +--------------+---------------------+--------+
721 | sufamiturbo  |    Sufami Turbo     |  NTSC  |
722 +--------------+---------------------+--------+
725 Frame rates are:
728 +---------+-----------------+
729 | Region  | Framerate (fps) |
730 +---------+-----------------+
731 +---------+-----------------+
732 |  PAL    |   322445/6448   |
733 +---------+-----------------+
734 |  NTSC   | 10738636/178683 |
735 +---------+-----------------+
738 10.3 Member: port1
740 Contains type of port #1 (as one line). Valid values are 'none', 
741 'gamepad', 'multitap' and 'mouse'. If not present, defaults to 
742 'gamepad'.
744 10.4 Member: port2
746 Contains type of port #2 (as one line). Valid values are 'none', 
747 'gamepad', 'multitap', 'mouse', 'superscope', 'justifier' and 
748 'justifiers'. If not present, defaults to 'none'.
750 10.5 Member: gamename
752 Contains name of the game (as one line).
754 10.6 Member: authors
756 Contains authors, one per line. Part before '|' is the full name, 
757 part after is the nickname.
759 10.7 Member: systemid
761 Always “lsnes-rr1” (one line). Used to reject other saves.
763 10.8 Member: controlsversion
765 Always “0” (one line). Used to identify what controls are there.
767 10.9 Member: “coreversion”
769 Contains bsnes core version number (as one line).
771 10.10 Member: projectid
773 Contains project ID (as one line). Used to identify if two movies 
774 are part of the same project.
776 10.11 Member: {rom,slota,slotb}{,xml}.sha256
778 Contains SHA-256 of said ROM or ROM mapping file (as one line). 
779 Absent if corresponding file is absent.
781 10.12 Member: moviesram.<name>
783 Raw binary startup SRAM of kind <name>. Only present in 
784 savestates and movies starting from SRAM.
786 10.13 Member: saveframe
788 Contains frame number (as one line) of frame movie was saved on. 
789 Only present in savestates.
791 10.14 Member: lagcounter
793 Current value of lag counter (as one line). Only present in 
794 savestates.
796 10.15 Member: pollcounters
798 Contains poll counters (currently 100 of them), one per line. 
799 Each line is raw poll count if DRDY is set for it. Otherwise it 
800 is negative poll count minus one. Only present in savestates.
802 10.16 Member: hostmemory
804 Raw binary dump of host memory. Only present in savestates.
806 10.17 Member: savestate
808 The raw binary savestate itself. Savestate detection uses this 
809 file, only present in savestates.
811 10.18 Member: screenshot
813 Screenshot of current frame. Only present in savestates. First 2 
814 bytes are big-endian width of image, rest are 24-bit RGB image 
815 data. Height of image is inferred from the width and size of 
816 data.
818 10.19 Member: sram.<name>
820 Raw binary SRAM of kind <name> at time of savestate. Only present 
821 in savestates.
823 10.20 Member: input
825 The actual input track, one line per subframe (blank lines are 
826 skipped).
828 • If the first byte of each line is '.', ' ', <tab> or '|', then 
829   the line is part of same frame as previous, otherwise it starts 
830   a new frame.
832 • First subframe must start a new frame.
834 Length of movie in frames is number of lines in input file that 
835 start a new frame.
837 10.21 Member: subtitles
839 Subtitle track. Optional.
841 • Each line is in form <firstframe> <numframes> <text>.
843 • Linefeed is encoded as \n, backslash is encoded as \\.
845 10.22 Member: rerecords
847 Contains textual base-10 rerecord count (as one line; emulator 
848 just writes this, it doesn't read it) + 1.
850 10.23 Member: rrdata
852 This member stores set of load IDs. There is one load ID per 
853 rerecord (plus one corresponding to start of project).
855 • This member constists of concatenation of records
857 • Each record is 2-36 bytes long and can represent 1-16,843,009 
858   consequtive IDs.
860 • IDs are interpretted as 256-bit big-endian integers with 
861   warparound.
863 • Initial predicted ID is all zeroes.
865 Format of each record is:
867 • 1 byte: Opcode byte. Bits 0-4 are prefix length (prefixlen), 
868   bits 5-6 are count length (countlen). Bit 7 is unused.
870 • 32-prefixlen bytes of ID.
872 • countlen bytes of big-endian count (count).
874 Records are processed as follows:
876 • To form the first ID encoded by record, take the first 
877   prefixlen bytes predicted ID and append the read ID value to 
878   it. The result is the first ID encoded.
880 • If countlen is 0, record encodes 1 ID.
882 • If countlen is 1, record encodes 2+count IDs.
884 • If countlen is 2, record encodes 258+count IDs.
886 • If countlen is 3, record encodes 65794+count IDs.
888 • The new predicted ID is the next ID after last one encoded by 
889   the record.
891 The number of rerecords + 1 is equal to the sum of number of IDs 
892 encoded by all records.
894 10.24 Member: starttime.second
896 Movie starting time, second part. Epoch is Unix epoch. Default is 
897 1,000,000,000.
899 10.25 Member: starttime.subsecond
901 Movie starting time, subsecond part. Unit is CPU clocks. Default 
902 is 0.
904 10.26 Member: savetime.second
906 Movie saving time, second part. Default is starttime.second. Only 
907 present in savestates.
909 10.27 Member: savetime.subsecond
911 Movie saving time, subsecond part. Default is 
912 starttime.subsecond. Only present in savestates.
914 11 lsvs file format (commentary tracks)
916 11.1 Clusters
918 • Each cluster is 8kB (8192 bytes) in size.
920 • Cluster n starts at offset 8192*n in file.
922 • The following clusters are system special:
924   – Cluster 0 and all clusters with number multiple of 2048 
925     (cluster tables)
927   – Cluster 1 (superblock)
929 11.2 Cluster tables
931 • The cluster table describing cluster n is stored in cluster n & 
932   ~0x7FF (zero last 11 bits of n).
934 • This cluster table consists of 2048 4-byte big-endian integers.
936 • Each entry describes a cluster in 16MB supercluster, in order.
938 • The valid values for entries are:
940   – 0x00000000: Free cluster
942   – 0x00000001: Last cluster in chain.
944   – 0xFFFFFFFF: System cluster (cluster tables and superblock)
946   – (anything else): Number of next cluster in chain. Must not be 
947     multiple of 2048.
949 • Due to limitations of the format, there can be at most 2097052 
950   superclusters, giving maximum file size of 16TB.
952 11.3 Stream table
954 • The stream table chain always starts in cluster 2.
956 • Otherwise, it follows normal chaining.
958 • The stream table consists of 16-byte entries:
960   – The first 8 bytes of entry give big-endian beginning position 
961     of stream in units of 1/48000 s.
963   – The next 4 bytes of entry give big-endian beginning cluster 
964     for control data. 0 here marks the entry as not present.
966   – The last 4 bytes of entry give big-endian beginning cluster 
967     for codec data.
969 • Stream table clusters are normal clusters, following normal 
970   chaining.
972 • The stream begnning position is not guarenteed unique. There 
973   can be multiple streams with the same starting position in the 
974   file.
976 11.4 Stream control data
978 • The stream control data consists of entries 4 bytes each:
980   – The first 2 bytes of entry gives big-endian length of packet
982   – The next byte of entry gives audio length of packet in units 
983     of 1/400 s.
985   – The last byte is control byte.
987     ∗ 0 means this entry is not present and the control data 
988       ends.
990     ∗ 1 is valid control entry.
992 • The stream control data can also end by running into end of the 
993   readable chain.
995   – This happens if there happens to be exact multiple of 2048 
996     packets in stream and number of packets is nonzero.
998 • These clusters follow normal chaining.
1000 11.5 Stream codec data
1002 • Stream codec data consists of raw Opus data packets packed back 
1003   to back with nothing in between.
1005 • Warning: Due to internal limitations, this data must reside in 
1006   the first 65536 superclusters (that is, the first 1TB of the 
1007   file).
1009 11.6 Superblock
1011 • The superblock is stored in cluster 1. 
1013 • The first 11 bytes are “sefs-magic”<NUL>.
1015 • The rest are unused.
1017 • This cluster 1 is marked as system special.
1019 12 Known ROM extensions
1021 • SNES cartridge ROMs: sfc, smc, swc, fig, ufo, sf2, gd3, gd7, 
1022   dx2, mgd, mgh.
1024 • DMG cartridge ROMs: dmg, gb.
1026 • GBC cartridge ROMs: cgb, gbc.
1028 13 Gamepack files
1030 • The first line must be: “[GAMEPACK FILE]”.
1032 • There is one needed line: “type <systype>”. This sets system 
1033   type to <systype>. The following system types are valid:
1035   – snes (SNES)
1037   – bsx (BS-X non-slotted)
1039   – bsxslotted (BS-X slotted)
1041   – sufamiturbo (Sufami Turbo)
1043   – sgb (Super Game Boy)
1045   – dmg (Game Boy)
1047   – gbc (Game Boy Color)
1049   – gbc_gba (Game Boy Color with GBA initial register values)
1051 • Optionally a region can be specified: “region <region>”. The 
1052   following values are valid:
1054   – autodetect (Autodetect region: snes and sgb only)
1056   – ntsc (NTSC: snes, bsx, bsxslotted, sufamiturbo, sgb)
1058   – pal (PAL: snes, sgb)
1060   – world (World: dmg, gbc, gbc_gba)
1062 • ROM images are loaded as: “rom <type> <file>”. The following 
1063   types are valid:
1065   – rom (Cartridge ROM in snes, dmg, gbc, gbc_gba. BIOS in bsx, 
1066     bsxslotted, sufamiturbo)
1068   – bsx (Cartridge ROM in bsx, bsxslotted)
1070   – slot-a (Cartridge ROM in sufamiturbo)
1072   – slot-b (Cartridge ROM in sufamiturbo)
1074 • ROM markup can be loaded as: “xml <type> <file>”. The types 
1075   valid are the same as for ROMs.
1077 • Patches can be loaded as “patch[<offset>] <type> <file>”. The 
1078   types are the same as for ROMs.
1080   – Offset is given in form [+-]<number>. Usually offset is 
1081     either +0 or -512.
1083   – Default offset is +0.
1085 13.1 Example:
1087 [GAMEPACK FILE]
1089 type snes
1091 rom rom speedygonzales.sfc
1093 patch-512 rom sonicthehedgehog.ips
1095 13.2 Example 2:
1097 [GAMEPACK FILE]
1099 type sgb
1101 rom rom supergameboy.sfc
1103 rom dmg megamanV.dmg
1105 14 Quick'n'dirty encode guide
1107 1. Start the emulator and load the ROM and movie file.
1109 2. Set large AVI option 'set-setting avi-large on'
1111 3. Enable dumping 'dump-avi tmpdump' 
1113 4. Unpause and let it run until you want to end dumping.
1115 5. Close the emulator (closing the window is the easiest way). Or 
1116   use 'end-avi'.
1118 6. For each tmpdump*.avi file created, on command prompt, do 
1119   'x264 --crf 10 -o tmpdump_<numbers>.mkv tmpdump_<numbers>.avi'.
1121 7. Do 'sox tmpdump.sox tmpdump.ogg rate -v 32000'
1123 8. Do 'mkvmerge -o tmpdump_video.mkv tmpdump_0000000.mkv + 
1124   tmpdump_0000001.mkv + tmpdump_0000002.mkv' (list every 
1125   tmpdump_<numbers>.mkv, with + in between).
1127 9. Do 'mkvmerge -o final.mkv tmpdump_video.mkv tmpdump.ogg'. Now 
1128   final.mkv contains quick'n'dirty encode.
1130 15 Axis configurations for some gamepad types:
1132 15.1 XBox360 controller:
1134 Axes 2 and 5 (joystick<n>axis2 and joystick<n>axis5) should be 
1135 set to pressure-+.
1137 set-axis joystick0axis2 pressure-+
1139 set-axis joystick0axis5 pressure-+
1141 • This is needed for SDL only. EVDEV sets those types correctly.
1143 15.2 PS3 “sixaxis” controller:
1145 Axes 8-19 should be disabled.
1147 set-axis joystick0axis8 disabled
1149 set-axis joystick0axis9 disabled
1151 set-axis joystick0axis10 disabled
1153 set-axis joystick0axis11 disabled
1155 set-axis joystick0axis12 disabled
1157 set-axis joystick0axis13 disabled
1159 set-axis joystick0axis14 disabled
1161 set-axis joystick0axis15 disabled
1163 set-axis joystick0axis16 disabled
1165 set-axis joystick0axis17 disabled
1167 set-axis joystick0axis18 disabled
1169 set-axis joystick0axis19 disabled
1171 16 Errata:
1173 16.1 Problems from BSNES core:
1175 • The whole pending save stuff.
1177 • Lack of layer hiding.
1179 • It is slow (especially accuracy).
1181 • Firmwares can't be loaded from ZIP archives.
1183 16.2 Other problems:
1185 • Modifiers don't work with pseudo-keys (SDL, EVDEV).
1187 • Audio for last dumped frame is not itself dumped.
1189 • Audio in UI is pretty bad in quality if game doesn't run at 
1190   full speed.
1192 • No menus, command based interface (SDL).
1194 • Long commands don't scroll.
1196 17 Changelog:
1198 17.1 rr0-beta1
1200 • Fix -Wall warnings
1202 • Fix dumper video corruption with levels 10-18.
1204 17.2 rr0-beta2
1206 • Autofire
1208 • Lots of code cleanups
1210 • Lua interface to settings
1212 • Allow specifying AVI borders without Lua
1214 • Fix scaling if vscale > 1 and originx > 0 (left border exists)
1216 • on_snoop lua callback
1218 • Faster movie loading and saving.
1220 17.3 rr0-beta3
1222 • Joystick support
1224 17.4 rr0-beta4
1226 • Fix multi-buttons
1228 • Save jukebox functionality.
1230 17.5 rr0-beta5
1232 • Try to fix some nasty failing movie load edge cases
1234 • Allow specifying scripts to run on command line.
1236 17.6 rr0-beta6
1238 • Major source code reorganization.
1240 • Backup savestates before overwriting.
1242 • Don't crash if loading initial state fails.
1244 17.7 rr0-beta7
1246 • Fix firmware lookup
1248 • Fix author name parsing
1250 • Fix rerecord counting
1252 • (SDL) Print messages to console if SDL is uninitialized
1254 • Add movieinfo program
1256 • Fix loading movies starting from SRAM.
1258 17.8 rr0-beta8
1260 • Add support for unattended dumping
1262 • Fix compiling for Win32
1264 • Don't lock up if sound can't be initialized
1266 • Strip trailing CR from commands
1268 • Don't try to do dubious things in global ctors (fix crash on 
1269   startup)
1271 17.9 rr0-beta9
1273 • Small documentation tweaking
1275 • Fix make clean
1277 • Fix major bug in modifier matching
1279 17.10 rr0-beta10
1281 • Lots of documentation fixes
1283 • Use dedicated callbacks for event backcomm., not commands.
1285 • Ensure that the watchdog is not hit when executing delayed 
1286   reset.
1288 • Remove errant tab from joystick message.
1290 17.11 rr0-beta11
1292 • Make autofire operate in absolute time, not linear time
1294 • Reinitialize controls when resuming from loadstate
1296 • Some more code cleanups
1298 • If Lua allocator fails, call OOM_panic()
1300 • Byte/word/dword/qword sized host memory write/read functions.
1302 • Dump at correct framerate if dumping interlaced NTSC 
1303   (height=448).
1305 17.12 rr0-beta12
1307 • Actually include the complete source code
1309 • Keep track of RTC
1311 17.13 rr0-beta13
1313 • Document {save,start}time.{,sub}second.
1315 • Intercept time() from bsnes core.
1317 17.14 rr0-beta14
1319 • Allow disabling time() interception (allow build on Mac OS X)
1321 • Use SDLMain on Mac OS X (make SDL not crash)
1323 • Disable delayed resets (just plain too buggy for now).
1325 • Code cleanups
1327 • Use 16-bit for graphics/video instead of 32-bit.
1329 • gui.rectangle/gui.pixel
1331 • gui.crosshair
1333 • New CSCD writer implementation.
1335 17.15 rr0-beta15
1337 • Fix interaction of * and +.
1339 • Manual improvements
1341 • Use gettimeofday()/usleep(), these seem portable enough.
1343 • Move joystick axis manipulation to keymapper code.
1345 • Changes to how read-only works.
1347 • Refactor controller input code.
1349 17.16 rr0-beta16
1351 • Fix mouseclick scale compensation.
1353 • Draw area boundaries correctly in SDL code.
1355 • gui.screenshot.
1357 • Fix CSCD output (buffer overrun and race condition).
1359 17.17 rr0-beta17
1361 • JMD dumping support.
1363 • Allow unattended dumping to JMD.
1365 • Move to BSNES v083.
1367 • Switch back to 32-bit colors.
1369 • Add Lua function gui.color.
1371 • Use some new C++11 features in GCC 4.6.
1373 • Be prepared for core frequency changes.
1375 • Pass colors in one chunk from Lua.
1377 17.18 rr0-beta18
1379 • New lua functions gui.line(), gui.status() and gui.circle(), 
1380   memory.vma_count(), memory.read_vma() and memory.find_vma().
1382 • Numerious documentation fixups
1384 • RTC time format changed
1386 • Reformat flags display
1388 • Allow lua package name to be overridden
1390 • SDUMP (high-quality dumping).
1392 • Split platform support to plugins.
1394 • Make all sound plugins support basic sound commands
1396 • Support portaudio for sound.
1398 • Allow disable Lua/SDL searching.
1400 • Upconvert colors when copying lcscreen to screen.
1402 • Reorganize source tree.
1404 • Evdev joystick support.
1406 • Refactor more code into generic window code.
1408 17.19 rr0-beta19
1410 • Refactor message handling.
1412 • Rework makefile
1414 • Documentation fixes
1416 • Finish pending saves before load/quit.
1418 • Wxwidgets graphics plugin.
1420 17.20 rr0-beta20
1422 • Get rid of win32-crap.[ch]pp.
1424 • Move files around a lot.
1426 • Get rid of need for host C++ compiler.
1428 • Bsnes v084 core.
1430 • Refactor inter-component communication.
1432 • Fix zero luma.
1434 • Fix crash on multiline aliases.
1436 • Load/Save settings in wxwidgets gui.
1438 17.21 rr0-beta21
1440 • Patch problems in bsnes core
1442 • SNES is little-endian, not big-endian!
1444 • Fix memory corruption in lcscreen::load()
1446 17.22 rr0-beta22
1448 • Fix interpretting repeat counts in rrdata loading.
1450 • New lua callback: on_frame()
1452 • Remove calls to runtosave() that aren't supposed to be there
1454 • Lua function: movie.read_rtc()
1456 • Ignore src/fonts/font.cpp
1458 • Fix more bsnes core problems
1460 • Control bsnes random seeding
1462 • Pause-on-end
1464 • Some bsnes core debugging features (state dump and state hash)
1466 • Fix titlebar version number (no, the last version wasn't 
1467   'lsnes-0-beta21', it was 'lsnes rr0-beta21').
1469 17.23 rr0-beta23
1471 • Fix memory corruption due to macro/field mixup
1473 • search-memory update
1475 • Allow direct-mapped framebuffer
1477 • SDL: Use SDL_ANYFORMAT if possible
1479 • SDMP2SOX: 2s delay modes.
1481 • Wxwidgets: Cleanups
1483 • Use sed -E, not sed -r. Fixes building on Mac OS X.
1485 • Wxwidgets: Save jukebox on exit
1487 • Fix RTC if using load-movie on savestate.
1489 • Fix crash related to full console mode.
1491 17.24 rr0-beta24
1493 • Wxwidgets: Allow bringing application to foreground on Mac OS 
1494   X.
1496 • Wxwidgets: Allow compiling on Mac OS X.
1498 • Use movie compare instead of movie hashing (faster save/load).
1500 • Lua: _SYSTEM table.
1502 17.25 rr0-beta25
1504 • sdmp2sox: Pad soundtrack if using -l or -L.
1506 • sdmp2sox: Fix NTSC overscan.
1508 • sdmp2sox: Add AR correction mode.
1510 • call lua_close() when exiting.
1512 • Fix zip_writer bug causing warnings from info-zip and error 
1513   from advzip.
1515 17.26 rr0-beta26
1517 • Fix IPS patching code (use bsnes core IPS patcher).
1519 • Implement BPS patching (using bsnes core IPS patcher).
1521 • Add feature to load headered ROMs.
1523 17.27 rr0-beta27
1525 • Show command names when showing keybindings
1527 17.28 rr0
1529 • Fix pause-on-end to be actually controllable
1531 • SDL: Poll all events in queue, not just first one (fixes 
1532   slowness in command typing)
1534 • Wxwidgets: Fix ROM loading.
1536 17.29 rr1-beta0
1538 • Lua: Add gui.textH, gui.textV, gui.textHV
1540 • Fix text colors on SDL on Mac OS X
1542 • Mode 'F' for finished in readonly mode.
1544 • Fix some WS errors.
1546 • Reliably pause after skip poll
1548 • Split UI and core into their own threads
1550 17.30 rr1-beta1
1552 • Remove leftover dummy SRAM slot
1554 • Fix controller numbers.
1556 17.31 rr1-beta2
1558 • Fix lsnes-dumpavi after interface change.
1560 • Also give BSNES patches for v085.
1562 • Pack movie data in memory.
1564 17.32 rr1-beta3
1566 • Fix framecount/length given when loading movies.
1568 • Controller command memory leak fixes.
1570 • Don't leak palette if freeing screen object.
1572 17.33 rr1-beta4
1574 • Detect revisions.
1576 • Wxwidgets: Allow controlling dumper from the menu.
1578 17.34 rr1-beta5
1580 • Rewrite parts of manual
1582 • Lua: Make it work with Lua 5.2.
1584 17.35 rr1-beta6
1586 • Win32: Fix compile errors.
1588 17.36 rr1-beta7
1590 • Refactor controller input code.
1592 • Fix crash when using command line on SDL / Mac OS X.
1594 17.37 rr1-beta8
1596 • Delete core/coroutine (obsolete)
1598 • Lag input display by one frame.
1600 • Rewind movie to beginning function.
1602 • Fix wrong frame number reported to Lua when repainting after 
1603   loadstate
1605 • Support UI editing of jukebox
1607 • Wxwidgets: Save settings on exit.
1609 • Support ${project} for filenames
1611 • SDL: Fix command history
1613 17.38 rr1-beta9
1615 • Fix some order-of-global-ctor bugs.
1617 17.39 rr1-beta10
1619 • Fix crashes when quitting on Win32.
1621 17.40 rr1-beta11
1623 • EVDEV: Queue keypresses from joystick, don't send directly
1625 • Wxwidgets: Load-Preserve that actually works.
1627 17.41 rr1-beta12
1629 • Wxwidgets: GUI for memory search.
1631 • Warn about using synchronous queue in UI callback.
1633 17.42 rr1-beta13
1635 • Remember last saved file for each ROM
1637 • Support MT dumping via boost.
1639 • Lua: input.raw
1641 • Lua: input.keyhook
1643 • Make mouse be ordinary input instead of special-casing
1645 • SDL: Don't screw up commands with NUL codepoints.
1647 17.43 rr1-beta14
1649 • Merge status panel and main window
1651 • True movie slot support (the rest of it)
1653 • SDL: Fix compilation error
1655 • Elminate cross calls in dump menu code.
1657 17.44 rr1-beta15
1659 • Cancel pending saves command
1661 • Wxwidgets: Code refactoring
1663 • Wxwidgets: Fix system -> reset
1665 • Wxwidgets: Read watch expressions in the right thread
1667 17.45 rr1-beta16
1669 • Wxwidgets: Don't prompt for member when running Lua script (Lua 
1670   doesn't support that).
1672 • Wxwidgets: 128 -> 1024 Autohold slots (in case more are 
1673   needed).
1675 • Don't append trailing '-' to prefix when saving movie.
1677 • Fix ROM/savestate handling (don't let user mismatch ROM and 
1678   savestates).
1680 17.46 rr1
1682 • Document memory watch syntax.
1684 17.47 rr1-delta1
1686 • Fix unattended dumping (lsnes-dumpavi)
1688 • Support RAW dumping
1690 • Use adv_dumper instead of the old interface in lsnes-dumpavi 
1691   (changes syntax)
1693 • Add option to control sample rate preturbation in AVI dumper
1695 17.48 rr1-delta2
1697 • Wxwidgets: Fix dumper submodes
1699 • Set core controller types before loadstate
1701 17.49 rr1-delta2epsilon1
1703 • Fix compiling with bsnes v086.
1705 17.50 rr1-delta3
1707 • Don't prompt before quitting
1709 • Start unpaused, preserve pause/unpause over load.
1711 • Try to autodetect if ROM is headered.
1713 • Wxwidgets: Only bring up ROM patching screen if specifically 
1714   requested.
1716 • Allow configuring some hotkeys.
1718 17.51 rr1-delta4
1720 • Lots of code cleanups
1722 • Fix JMD compression (JMD dumping was broken)
1724 • Don't crash if Lua C function throws an exception.
1726 • Support bitmap drawing in Lua.
1728 • Fix bsnes v085/v086 patches.
1730 • Improve stability on win32.
1732 17.52 rr1-delta4epsilon1
1734 • Don't corrupt movie if movie length is integer multiple of 
1735   frames per page.
1737 17.53 rr1-delta5
1739 • New Lua hooks: on_rewind, on_frame_emulated, on_idle, on_timer
1741 • New Lua functions: emulator_ready(), utime(), 
1742   set_idle_timeout(), set_timer_timeout(), bit.extract(), 
1743   bit.value(), input.geta(), input.seta() and 
1744   input.controllertype()
1746 • Wxwidgets: Fix internal focus lost (hotkeys stop working)
1748 • Wxwidgets: Fix broken modifiers
1750 • on_paint has parameter now.
1752 • Optional initital fill for bitmaps
1754 • Fix palette changing.
1756 • Optimize rendering a bit.
1758 • Bsnes v087 support.
1760 17.54 rr1-delta5epsilon1
1762 • Movieinfo: Fix display of port #2 type.
1764 • Call on_input() after loadstate.
1766 17.55 rr1-delta5epsilon2
1768 • Fix writing port2 data to movie.
1770 • Fix SRAM handling with Bsnes v087.
1772 17.56 rr1-delta6
1774 • Library loading support
1776 • Built-in TSCC encoder
1778 • Hi-color (256T colors) dumping.
1780 • Dump over TCP/IP(v6)
1782 • Hidable status panel
1784 • Turbo toggle/hold
1786 • Adjustable sound volume
1788 • Screen scaling
1790 • Allow DnD into filename boxes
1792 • Configurable paths
1794 • Portaudio: Fix speaker popping at start
1796 • Lots of UI changes
1798 • Speed adjustment menu
1800 • Win32 joystick support
1802 • Lua: gui.rainbow and gui.box
1804 • Split key lists into classes (the key list was large!)
1806 • More save slots support
1808 • Wxwidgets (wxJoystick) joystick support
1810 17.57 rr1-delta7
1812 • Lots of internal joystick refactoring
1814 • Evdev: Add mapping for BTN_TOOL_QUINTTAP
1816 • Wxwidgets: Settings mode (open settings without ROM)
1818 • Wxwidgets: Prompt key to use option
1820 • Wxwidgets: Fix crash if key goes away underneath
1822 • Wxwidgets: Fix mouse position in presence of scaling
1824 • AVI dumper: Mode 4 (high-quality resampling to common rate 
1825   using SRC)
1827 • Wxwidgets: Redesign hotkeys dialog to avoid tree control (tree 
1828   control doesn't seem to work well on WinXP)
1830 • Start paused option.
1832 17.58 rr1-delta7epsilon1
1834 • AVI: ZMBV support
1836 • lsnes-dumpavi: Start Lua before starting dumper
1838 • AVI: Fix secondary audio in mode 4.
1840 17.59 rr1-delta7epsilon2
1842 • AVI: Refactor ZMBV a bit.
1844 • Fix error reading analog values from movie file
1846 17.60 rr1-delta8
1848 • Delayed reset support
1850 • Lua: memory.hash_region
1852 17.61 rr1-delta8epsilon1
1854 • Rework the build system
1856 • Typing input support
1858 • Fix building with bsnes v086 and v087.
1860 • SDL: Save settings on exit
1862 • SDL: Command to enter command line mode with given command.
1864 • SDL: More advanced command editing.
1866 17.62 rr1-delta9
1868 • wxMSW: Fix the “arrow keys and enter don't work” problem
1870 • MSU-1 support
1872 • Show mode changes due to rewinding.
1874 • Unsafe rewind support
1876 • Fix directory transversal.
1878 17.63 rr1-delta10
1880 • AVI: Sound mode 5 (48kHz high-quality)
1882 • Lua: Reset Lua VM
1884 • Map the SNES bus into address space
1886 • Fix loading memory watch files with CRLF line endings
1888 17.64 rr1-delta10epsilon1
1890 • Map bsnes internal state into memory space
1892 • Fix the “click on panel wedges the emulator” for real.
1894 • DnD movies/saves on the main window.
1896 17.65 rr1-delta11
1898 • Split core bindings into own module.
1900 • Remember invalid settings
1902 • Support for modified Gambatte core for GB/GBC emulation.
1904 • Reload/swap ROM function
1906 17.66 rr1-delta11epsilon1
1908 • Fix step poll function
1910 17.67 rr1-delta12
1912 • Non-insane savestate anchoring
1914 17.68 rr1-delta13
1916 • More Memory search methods
1918 • Preserve movie if loading in RO mode.
1920 • Fix a obscure case in timeline check
1922 • Revamp the entiere ROM loading code
1924 • Support DnD on ROMs
1926 • Revamp menu layout
1928 • Standalone hotkey config dialog
1930 • Show bindings in more user-friendly format
1932 17.69 rr1-delta13epsilon1
1934 • Pipedec support
1936 • Fix uninitialized variables in bsnes v085
1938 17.70 rr1-delta14
1940 • Merge gambatte core into mainline (from its own branch)
1942 • Wxwidgets: Show expected dump file formats
1944 • Memory watch: Data typing
1946 • lsnes internal MMIO area.
1948 • Wxwidgets: New memory watch editor
1950 • Hexadecimal memory watches
1952 • Wxwidgets: Monospaced panel
1954 • Wxwidgets: Split memory watches in panel
1956 • Wxwidgets: Disable VMAs in memory search
1958 • lsnes-dumpavi: Fix speed bug
1960 • Movie subtitle support
1962 • Fix rerecord count reporting
1964 • Don't trash movie when loading in readonly mode.
1966 17.71 rr1-delta14epsilon1
1968 • Wxwidgets: Fix crashes on closing settings dialogs on Mac OS X.
1970 • Fix build on Mac OS X.
1972 • Lua: loopwrapper
1974 • Wxwidgets: Hidable messages window
1976 • Lua: input.joyset
1978 • Bsnes: Support inconsistent saves
1980 • Bsnes: Allow simulating saving every frame
1982 • Fix desync if savestate is loaded in readonly mode in certain 
1983   conditions.
1985 • Wxwidgets: Fix save dialogs on Mac OS X.
1987 • Wxwidgets: Fix insane status width on Win32.
1989 • Wxwidgets: Fix autohold processing to be faster.
1991 • Wxwidgets: Allow loading ROMs and movies from commandline.
1993 17.72 rr1-delta15
1995 • Be a bit smarter with --load
1997 • Rewrote higher-level parts of audio system
1999 • Tool to build commentary tracks
2001 • Lua: input.joyget
2003 • Gambatte: Add support for SVN358
2005 • Use builtin font when rendering status panel.
2007 • Option to detach memory watch to its own window.
2009 • Recent ROMs/Movies menu
2011 • Libao support
2013 • Useful lag counter for SNES games that autopoll
2015 • Fix buffer overflow in gambatte sound output
2017 17.73 rr1-delta15epsilon1
2019 • Don't blow up on wxGTK if the window is hidden somehow
2021 • Support simultaneous drop of ROM and movie.
2023 • Gambatte: Don't save spurious SRAMs.
2025 • Make SGB ROMs actually usable.
2027 • Fix so that saved movies appear in recent movies.
2029 • Don't open multiple commentary editors at once.
2031 17.74 rr1-delta15epsilon2
2033 • Lua: memory.readregion/memory.writeregion
2035 • Lua: memory.map{,s}{byte,word,dword,qword}
2037 • Lua: memory.map_structure
2039 • Lua: Fix bus_address for gambatte
2041 • Fix features dependent of bsnes debugger
2043 • Cleanup bsnes debugger logic
2045 • Fix resets in presence of save every frame
2047 17.75 rr1-delta15epsilon3
2049 • Lua: input.lcid_to_pcid
2051 • Fix off-by-one bug with slot hashes
2053 • Fix crashes on certain memory watch expressions
2055 • Lua: memory.read_expr
2057 • Lua: Fix memory.read_expr on nil argument
2059 • Fix the code to compile on G++ 4.7
2061 • Change button_id to be a function pointer field, not a virtual 
2062   method
2064 • Add bsnes patches to fix libsnes to compile on GCC 4.7
2066 • Gambatte: Always use legacy lag counting
2068 • Memory commands: Memory addresses are up to 16 hex digits, not 
2069   up to 8
2071 • Fix analog controllers
2073 • Fix autohold menus
2075 • Fix button symbols in input display
2077 • Compensate for nuts bsnes superscope/justifier handling
2079 • Lua: Fix bit.extract boolean handling
2081 17.76 rr2-beta0
2083 • Split emulation cores more from the rest
2085 • Support having multiple emulation cores compiled at once
2087 • Support arbitrary number of ports (well, up to 31 anyway).
2089 • SNES debugger support
2091 • Support 16-button controllers
2093 • Remove old SDL front end
2095 • Data-driven controller buttons
2097 • Generate the port code from defines
2099 17.77 rr2-beta1
2101 • Update libgambatte to SVN364
2103 • Get rid of partial linking (building with MXE works)
2105 • Load XML even without gamepack files
2107 • Support screen rotate & flip
2109 • Fix bug when changing controller key to another subkey of the 
2110   same key
2112 17.78 rr1-delta16
2114 • Stop at movie end: Don't off-by-one
2116 • Fix crash closing lsnes with voice playback active.
2118 • Import/Export OggOpus for commentary tracks
2120 • 16-button controllers.
2122 • Don't show nonexistent controllers in input display
2124 • Set voice record/playback volume from UI
2126 • Patches for gambatte SVN364.
2128 • Load markup (if exists) even without gamepack file.
2130 • Screen rotation & flipping
2132 • Lua: Some new bit functions
2134 • Auto-refresh voice streams on change.
2136 • Auto-refresh subtitles on change & new subtitle editor.
2138 • Fix music volume adjustment.
2140 17.79 rr2-beta2
2142 • Use system threads instead of platform threads
2144 • Cleanup build by allowing dummy and real drivers to link 
2145   together.
2147 • Split duplex support
2149 17.80 rr1-delta16epsilon1
2151 • Wxwidgets: Fix memory watch rendering.
2153 • Wxwidgets: Allow setting voice stream gain.
2155 • Wxwidgets: VU meters and volume adjustment.
2157 • Lua: Custom fonts support.
2159 • Lua: Fix methods stopping working when resetting Lua.
2161 • Fix loading standard-format movies in preserve (readonly) mode.
2163 17.81 rr1-delta17
2165 • Primitive movie editor
2167 • Fix VU meter with no sound device.
2169 • Fix various undefined return values.
2171 • Show rates in VU meter window.
2173 17.82 rr2-beta3
2175 • Lua: Render queues as objects
2177 • Bsnes: support hard resets
2179 • Dedicated sound devices dialog
2181 • Change the default AVI sound mode to 2 or 5.
2183 • Fix totally borked movie saving.
2185 • Portaudio: Use split duplex with different devices.
2187 • Fix controls with gambatte core.
2189 • Modify save slot set handling.
2191 • lsnes-dumpavi: --firmware-path.
2193 • Fix lots of compiler warnings.
2195 17.83 rr1-delta17epsilon1
2197 • Commentary tool: Set nominal bit rate and limit max bit rate.
2199 • Lua: Unconditionally reload host memory on loadstate
2201 • Lua: Query bindings, manipulate aliases, create inverse 
2202   bindings
2204 • Lua: Fix crashes with resetting VM while some types of paint 
2205   requests are in flight.
2207 • Lua: gui.text: Clip the text properly instead of corrupting 
2208   memory in some cases.
2210 • Save screenshot header reliably
2212 • Lua: Backport input.get2 and input.set2
2214 • Lua: New controller info functions.
2216 • Movie editor: Fix reset delay counters to be the right way 
2217   around.
2219 • Lua: on_snoop2
2221 • Lua: on_button and input.veto_button.
2223 17.84 rr2-beta4
2225 • Revert memory leak fix breaking input
2227 • Refactor Opus handling
2229 • Restrict member picking only to .zip files
2231 • Fix reading of host-endian VMAs.
2233 • Fix rlow and rhigh to be the right way around.
2235 • Lua: Don't wedge VM if callback fails with an exception
2237 • Refactor Ogg handling.
2239 17.85 rr1-delta17epsilon2
2241 • Fix saving PNG screenshots on Win32.
2243 • Movie editor: Sweep axis.
2245 • Load selected slot in ro/rw/preserve/movie mode.
2247 • input.joyset: Preserve and invert user input.
2249 • Allow immediate saving at point of save (transfer saves).
2251 • Wxwidgets: Filter filenames in dialogs, autoappend extensions.
2253 • data/verysmall.font: Add missing glyph 70 (“F”).
2255 • Lua: Allow painting custom fonts with halo.
2257 • Fix memory value search to work on byte types.
2259 17.86 rr2-beta5
2261 • Reject oggopus files with incomplete pregap
2263 • Fix multistream and ogg demuxing
2265 • Workaround bug with screen >1024 pixels wide.
2267 • Allow on_input to force/veto system controls.
2269 • Dedicated autohold/autofire window.
2271 • Support per-button autofire.
2273 • Fix crash on trying to frameadvance/exit with no ROM loaded.
2275 • Fix nonexistent controller key warnings.
2277 • Movie editor: Fix mouse editing (TYPE_RAXIS)
2279 • TAS input plugin
2281 • Analog passthrough.
2283 • Add throttle axes (TYPE_TAXIS).
2285 • Fix movie reading with first port having multiple controllers.
2287 • Move some info from status panel to statusbar.
2289 17.87 rr1-delta17epsilon3
2291 • Fix status panel (and movie editor) flicker
2293 • Show effects of Lua in input display
2295 • Offer lsmv.backup as file filter too for load lsmv
2297 • Allow slowing down subframe advance 
2299 • Display current save slot information
2301 • Add snes9x fonts
2303 • Fix hotkeys stopping working after X-ing settings dialog
2305 • Movie editor: Fix bug if extending finished movie
2307 • Cap current_frame_first_subframe to movie size when recounting 
2308   movie
2310 • Movie editor: Interpret ctrl+click as right click 
2312 17.88 rr2-beta6
2314 • Autofire: Fix false status indications
2316 • Fix subframe counter
2318 • Fix print() after Lua reset
2320 • New settings framework
2322 • Remove some unused leftover stuff
2324 • Fix race condition causing possible crash on startup
2326 • Fix compiling if uint64_t and size_t are not compatible
2328 • Lua: Don't crash if input.[gs]et{,a} is called outside on_input
2330 17.89 rr2-beta7
2332 • Fix bug causing crash if triple has invalid button