Clean up some header files
[lsnes.git] / manual.lyx
blob164f8291b18d65b27d5b735f10a68e220033425e
1 #LyX 2.0 created this file. For more info see http://www.lyx.org/
2 \lyxformat 413
3 \begin_document
4 \begin_header
5 \textclass article
6 \use_default_options true
7 \maintain_unincluded_children false
8 \language finnish
9 \language_package default
10 \inputencoding auto
11 \fontencoding global
12 \font_roman default
13 \font_sans default
14 \font_typewriter default
15 \font_default_family default
16 \use_non_tex_fonts false
17 \font_sc false
18 \font_osf false
19 \font_sf_scale 100
20 \font_tt_scale 100
22 \graphics default
23 \default_output_format default
24 \output_sync 0
25 \bibtex_command default
26 \index_command default
27 \paperfontsize default
28 \use_hyperref false
29 \papersize default
30 \use_geometry false
31 \use_amsmath 1
32 \use_esint 1
33 \use_mhchem 1
34 \use_mathdots 1
35 \cite_engine basic
36 \use_bibtopic false
37 \use_indices false
38 \paperorientation portrait
39 \suppress_date false
40 \use_refstyle 1
41 \index Hakusana
42 \shortcut idx
43 \color #008000
44 \end_index
45 \secnumdepth 3
46 \tocdepth 3
47 \paragraph_separation indent
48 \paragraph_indentation default
49 \quotes_language english
50 \papercolumns 1
51 \papersides 1
52 \paperpagestyle default
53 \tracking_changes false
54 \output_changes false
55 \html_math_output 0
56 \html_css_as_file 0
57 \html_be_strict false
58 \end_header
60 \begin_body
62 \begin_layout Section
63 Command line options
64 \end_layout
66 \begin_layout Subsection
67 ROM options
68 \end_layout
70 \begin_layout Standard
71 These options control loading the ROM.
72  <kind> can be one of following:
73 \end_layout
75 \begin_layout Itemize
76 rom: main cart ROM.
77 \end_layout
79 \begin_layout Itemize
80 bsx: BS-X flash ROM in non-slotted mode.
81 \end_layout
83 \begin_layout Itemize
84 bsxslotted: BS-X flash ROM in slotted mode.
85 \end_layout
87 \begin_layout Itemize
88 dmg: Game Boy ROM
89 \end_layout
91 \begin_layout Itemize
92 slot-a: Sufami Turbo Slot A.
93 \end_layout
95 \begin_layout Itemize
96 slot-b: Sufami Turbo Slot B.
97 \end_layout
99 \begin_layout Subsubsection
100 --<kind>=<file>
101 \end_layout
103 \begin_layout Standard
104 Set the <file> to use as ROM of <kind>.
105 \end_layout
107 \begin_layout Subsubsection
108 --ips-<kind>=<file>
109 \end_layout
111 \begin_layout Standard
112 Apply IPS patch <file> to ROM of <kind>
113 \end_layout
115 \begin_layout Subsubsection
116 --<kind>-xml=<file>
117 \end_layout
119 \begin_layout Standard
120 Set the <file> to use as ROM mapping for <kind>.
121  If no mapping file is specified, defaults are used.
122 \end_layout
124 \begin_layout Subsubsection
125 --ips-<kind>-xml=<file>
126 \end_layout
128 \begin_layout Standard
129 Apply IPS patch <file> to ROM mapping for <kind>.
130 \end_layout
132 \begin_layout Subsubsection
133 --ips-offset=<offset>
134 \end_layout
136 \begin_layout Standard
137 Set IPS apply offset to <offset> (can be negative).
138  In practicular, <offset> of -512 might be handy for applying headered IPS
139  patches.
140 \end_layout
142 \begin_layout Subsubsection
143 --pal
144 \end_layout
146 \begin_layout Standard
147 Force ROM to be considered PAL-only (warning: Will cause error if used on
148  anything except SNES and SGB).
149 \end_layout
151 \begin_layout Subsubsection
152 --ntsc
153 \end_layout
155 \begin_layout Standard
156 Force ROM to be considered NTSC-only (default for everything except SNES
157  and SGB).
158 \end_layout
160 \begin_layout Subsection
161 New session options
162 \end_layout
164 \begin_layout Standard
165 If filename is not specified, new session is started.
166  These options control properties of that:
167 \end_layout
169 \begin_layout Subsubsection
170 --port1=<type>
171 \end_layout
173 \begin_layout Standard
174 Set type of port1 (default is 'gamepad').
175  Valid values are 'none', 'gamepad', 'multitap' (warning: makes most games
176  refuse to start) and 'mouse'.
177 \end_layout
179 \begin_layout Subsubsection
180 --port2=<type>
181 \end_layout
183 \begin_layout Standard
184 Set type of port2 (default is 'none').
185  Valid values are 'none', 'gamepad', 'multitap', 'mouse', 'superscope',
186  'justifier' and 'justifiers'.
187 \end_layout
189 \begin_layout Subsubsection
190 --gamename=<name>
191 \end_layout
193 \begin_layout Standard
194 Set the name of game to <name>
195 \end_layout
197 \begin_layout Subsubsection
198 --author=<name>
199 \end_layout
201 \begin_layout Standard
202 Add author with full name of <name> (no nickname).
203 \end_layout
205 \begin_layout Subsubsection
206 --author=|<name>
207 \end_layout
209 \begin_layout Standard
210 Add author with nickname of <name> (no full name).
211 \end_layout
213 \begin_layout Subsubsection
214 --author=<fullname>|<nickname>
215 \end_layout
217 \begin_layout Standard
218 Add author with full name of <fullname> and nickname of <nickname>.
219 \end_layout
221 \begin_layout Subsection
222 <filename>
223 \end_layout
225 \begin_layout Standard
226 If filename is specified on command line, it is loaded as initial state
227  (instead of constructing one).
228 \end_layout
230 \begin_layout Section
231 Startup file lsnes.rc
232 \end_layout
234 \begin_layout Standard
235 Upon startup, lsnes executes file lsnes.rc as commands.
236  This file is located in:
237 \end_layout
239 \begin_layout Itemize
240 Windows: %APPDATA%
241 \backslash
242 lsnes
243 \backslash
244 lsnes.rc (if %APPDATA% exists)
245 \end_layout
247 \begin_layout Itemize
248 Unix: $XDG_CONFIG_HOME/lsnes/lsnes.rc (if $XDG_CONFIG_HOME exists)
249 \end_layout
251 \begin_layout Itemize
252 Unix: $HOME/.config/lsnes/lsnes.rc (if $HOME exists)
253 \end_layout
255 \begin_layout Itemize
256 All: ./lsnes.rc (fallback default).
257 \end_layout
259 \begin_layout Standard
260 If leading directories do not exist, attempt to create them is made.
261 \end_layout
263 \begin_layout Section
264 Game internal commands
265 \end_layout
267 \begin_layout Itemize
268 Commands beginning with '*' invoke the corresponding command without alias
269  expansion.
270 \end_layout
272 \begin_layout Itemize
273 If command starts with '+', the command is executed as-is when button is
274  pressed, and when button is released, it is executed with '+' replaced
275  by '-'.
276 \end_layout
278 \begin_layout Subsection
279 Settings:
280 \end_layout
282 \begin_layout Standard
283 Settings control various aspects of emulator behaviour.
284 \end_layout
286 \begin_layout Subsubsection
287 set-setting <setting> <value>
288 \end_layout
290 \begin_layout Standard
291 Sets setting <setting> to value <value> (may be empty).
292 \end_layout
294 \begin_layout Subsubsection
295 unset-setting <setting>
296 \end_layout
298 \begin_layout Standard
299 Try to unset setting <setting> (not all settings can be unset).
300 \end_layout
302 \begin_layout Subsubsection
303 get-setting <setting>
304 \end_layout
306 \begin_layout Standard
307 Read value of setting <setting>
308 \end_layout
310 \begin_layout Subsubsection
311 print-settings
312 \end_layout
314 \begin_layout Standard
315 Print names and values of all settings.
316 \end_layout
318 \begin_layout Subsection
319 Keybindings
320 \end_layout
322 \begin_layout Standard
323 Keybindings bind commands or aliases to keys (or pseudo-keys).
325 \end_layout
327 \begin_layout Standard
328 Notes:
329 \end_layout
331 \begin_layout Itemize
332 Do not bind edge active (+/-) commands to keys with modifiers, that won't
333  work right!
334 \end_layout
336 \begin_layout Itemize
337 Names of keys and modifiers are platform-dependent.
338 \end_layout
340 \begin_layout Subsubsection
341 bind-key [<mod>/<modmask>] <key> <command>
342 \end_layout
344 \begin_layout Standard
345 Bind <command> to key <key> (activating if modifiers in <modmask> (comma-seperat
346 ed list) are set as <mod> (comma-seperated list).
348 \end_layout
350 \begin_layout Subsubsection
351 unbind-key [<mod>/<modmask>] <key>
352 \end_layout
354 \begin_layout Standard
355 Unbind command from <key> (with specified <mod> and <modmask>).
356 \end_layout
358 \begin_layout Subsubsection
359 print-keybindings
360 \end_layout
362 \begin_layout Standard
363 Print all key bindings in effect.
364 \end_layout
366 \begin_layout Subsection
367 Aliases
368 \end_layout
370 \begin_layout Standard
371 Aliases bind command to sequence of commands.
372  After alias has been defined, it replaces the command it shadows.
373 \end_layout
375 \begin_layout Standard
376 Notes:
377 \end_layout
379 \begin_layout Itemize
380 You can't alias command to itself.
381 \end_layout
383 \begin_layout Itemize
384 Aliases starting with +/- are edge active just like ordinary commands starting
385  with +/-.
386 \end_layout
388 \begin_layout Itemize
389 One command can be aliased to multiple commands.
390 \end_layout
392 \begin_layout Subsubsection
393 alias-command <command> <expansion>
394 \end_layout
396 \begin_layout Standard
397 Append <expansion> to alias <command>.
398 \end_layout
400 \begin_layout Subsubsection
401 unalias-command <command>
402 \end_layout
404 \begin_layout Standard
405 Clear alias expansion for <command>.
406 \end_layout
408 \begin_layout Subsubsection
409 print-aliases
410 \end_layout
412 \begin_layout Standard
413 Print all aliases and their expansions in effect.
414 \end_layout
416 \begin_layout Subsection
417 run-script <script>
418 \end_layout
420 \begin_layout Standard
421 Run <script> as if commands were entered on command line.
422 \end_layout
424 \begin_layout Subsection
425 Video dumping
426 \end_layout
428 \begin_layout Standard
429 Following commands control video dumping:
430 \end_layout
432 \begin_layout Subsubsection
433 dump-video <level> <prefix>
434 \end_layout
436 \begin_layout Standard
437 Dump video to prefix <prefix> at level <level> (0-18).
438 \end_layout
440 \begin_layout Itemize
441 The codec is Camstudio Codec in gzip mode.
442 \end_layout
444 \begin_layout Itemize
445 Encoder and muxer are internal, available on all platforms.
446 \end_layout
448 \begin_layout Itemize
449 Audio enable/disable and framerate has no effect.
450 \end_layout
452 \begin_layout Itemize
453 Warning: Levels 10-18 are not compatible with AVISource.
454 \end_layout
456 \begin_layout Itemize
457 Recomended level is 7 if decoded by AVISource.
458 \end_layout
460 \begin_layout Itemize
461 Recomended level is 16 if decoded by ffmpeg, mencoder or FFMpegSource.
462 \end_layout
464 \begin_layout Standard
465 Note: The audio dumped to .avi is low-quality version.
466  The high-quality version is dumped to .sox file.
467 \end_layout
469 \begin_layout Subsubsection
470 end-video
471 \end_layout
473 \begin_layout Standard
474 End current video dump.
475 \end_layout
477 \begin_layout Subsection
478 Memory manipulation
479 \end_layout
481 \begin_layout Standard
482 <address> may be decimal or hexadecimal (prefixed with '0x').
483  <value> can be hexadecimal (prefixed with '0x'), unsigned or signed (prefixed
484  with '-') decimal.
485 \end_layout
487 \begin_layout Standard
488 The available element <sizes> are:
489 \end_layout
491 \begin_layout Itemize
492 byte: 1 byte
493 \end_layout
495 \begin_layout Itemize
496 word: 2 bytes
497 \end_layout
499 \begin_layout Itemize
500 dword: 4 bytes
501 \end_layout
503 \begin_layout Itemize
504 qword: 8 bytes
505 \end_layout
507 \begin_layout Standard
508 When reading RAM and ROM, multi-byte reads/writes are big-endian.
509  When dealing with DSP memory, multi-byte reads/writes are native-endian
510  (do not use operand sizes exceeding DSP bitness, except dword is OK for
511  24-bit memory).
512 \end_layout
514 \begin_layout Subsubsection
515 read-<size> <address>
516 \end_layout
518 \begin_layout Standard
519 Read the value of byte in <address>.
520 \end_layout
522 \begin_layout Subsubsection
523 read-s<size> <address>
524 \end_layout
526 \begin_layout Standard
527 Read the value of signed byte in <address>.
528 \end_layout
530 \begin_layout Subsubsection
531 write-<size> <address> <value>
532 \end_layout
534 \begin_layout Standard
535 Write <value> to byte in address <address>.
536 \end_layout
538 \begin_layout Subsubsection
539 search-memory reset
540 \end_layout
542 \begin_layout Standard
543 Reset the memory search
544 \end_layout
546 \begin_layout Subsubsection
547 search-memory count
548 \end_layout
550 \begin_layout Standard
551 Print number of candidates remaining
552 \end_layout
554 \begin_layout Subsubsection
555 search-memory print
556 \end_layout
558 \begin_layout Standard
559 Print all candidates remaining
560 \end_layout
562 \begin_layout Subsubsection
563 search-memory <usflag><sizeflag><op>
564 \end_layout
566 \begin_layout Standard
567 Searches memory for addresses satisfying criteria.
568 \end_layout
570 \begin_layout Standard
571 <usflag> can be:
572 \end_layout
574 \begin_layout Itemize
575 u: unsigned
576 \end_layout
578 \begin_layout Itemize
579 s: signed
580 \end_layout
582 \begin_layout Standard
583 <sizeflag> can be:
584 \end_layout
586 \begin_layout Itemize
587 b: byte
588 \end_layout
590 \begin_layout Itemize
591 w: word
592 \end_layout
594 \begin_layout Itemize
595 d: dword
596 \end_layout
598 \begin_layout Itemize
599 q: qword
600 \end_layout
602 \begin_layout Standard
603 <op> can be:
604 \end_layout
606 \begin_layout Itemize
607 lt: < previous value.
608 \end_layout
610 \begin_layout Itemize
611 le: <= previous value.
612 \end_layout
614 \begin_layout Itemize
615 eq: = previous value.
616 \end_layout
618 \begin_layout Itemize
619 ne: != previous value.
620 \end_layout
622 \begin_layout Itemize
623 ge: >= previous value.
624 \end_layout
626 \begin_layout Itemize
627 gt: > previous value.
628 \end_layout
630 \begin_layout Subsubsection
631 search-memory <sizeflag> <value>
632 \end_layout
634 \begin_layout Standard
635 Searches for addresses that currently have value <value>.
636  <sizeflag> is as in previous command.
637 \end_layout
639 \begin_layout Subsection
640 Main commands
641 \end_layout
643 \begin_layout Standard
644 These commands are not available in lsnesrc, but are available after ROM
645  has been loaded.
646 \end_layout
648 \begin_layout Subsubsection
649 quit-emulator [/y]
650 \end_layout
652 \begin_layout Standard
653 Quits the emulator (asking for confirmation).
654  If /y is given, no confirmation is asked.
655 \end_layout
657 \begin_layout Subsubsection
658 pause-emulator
659 \end_layout
661 \begin_layout Standard
662 Toggle paused/unpaused
663 \end_layout
665 \begin_layout Subsubsection
666 +advance-frame
667 \end_layout
669 \begin_layout Standard
670 Advance frame.
671  If the button is still held after configurable timeout expires, game unpauses
672  for the duration frame advance is held.
673 \end_layout
675 \begin_layout Subsubsection
676 +advance-poll
677 \end_layout
679 \begin_layout Standard
680 Advance subframe.
681  If the button is still held after configurable timeout expires, game unpauses
682  for the duration frame advance is held.
683 \end_layout
685 \begin_layout Subsubsection
686 advance-skiplag
687 \end_layout
689 \begin_layout Standard
690 Skip to first poll in frame after current.
691 \end_layout
693 \begin_layout Subsubsection
694 reset
695 \end_layout
697 \begin_layout Standard
698 Reset the SNES after this frame.
699 \end_layout
701 \begin_layout Subsubsection
702 load-state <filename>
703 \end_layout
705 \begin_layout Standard
706 Load savestate <filename> in readwrite mode.
707 \end_layout
709 \begin_layout Subsubsection
710 load-readonly <filename>
711 \end_layout
713 \begin_layout Standard
714 Load savestate <filename> in readonly mode.
715 \end_layout
717 \begin_layout Subsubsection
718 load-preserve <filename>
719 \end_layout
721 \begin_layout Standard
722 Load savestate <filename> in readonly mode, preserving current events.
723 \end_layout
725 \begin_layout Subsubsection
726 load-movie <filename>
727 \end_layout
729 \begin_layout Standard
730 Load savestate <filename>, ignoring save part in readonly mode.
731 \end_layout
733 \begin_layout Subsubsection
734 save-state <filename>
735 \end_layout
737 \begin_layout Standard
738 Save system state to <filename> as soon as possible.
739 \end_layout
741 \begin_layout Subsubsection
742 save-movie <filename>
743 \end_layout
745 \begin_layout Standard
746 Save movie to <filename>.
747 \end_layout
749 \begin_layout Subsubsection
750 set-rwmode
751 \end_layout
753 \begin_layout Standard
754 Set read-write mode.
755 \end_layout
757 \begin_layout Subsubsection
758 set-gamename <name>
759 \end_layout
761 \begin_layout Standard
762 Set name of the game to <name>
763 \end_layout
765 \begin_layout Subsubsection
766 get-gamename
767 \end_layout
769 \begin_layout Standard
770 Print the name of the game.
771 \end_layout
773 \begin_layout Subsubsection
774 add-author <author>
775 \end_layout
777 \begin_layout Standard
778 Adds new author <author>.
779  If <author> does not contain '|' it is full name.
780  If it contains '|', '|' splits the full name and nickname.
781 \end_layout
783 \begin_layout Subsubsection
784 edit-author <num> <author>
785 \end_layout
787 \begin_layout Standard
788 Edit the author in slot <num> (0-based) to be <author> (see add-author for
789  format)
790 \end_layout
792 \begin_layout Subsubsection
793 remove-author <num>
794 \end_layout
796 \begin_layout Standard
797 Remove author in slot <num>
798 \end_layout
800 \begin_layout Subsubsection
801 print-authors
802 \end_layout
804 \begin_layout Standard
805 Print authors.
806 \end_layout
808 \begin_layout Subsubsection
809 test-1, test-2, test-3
810 \end_layout
812 \begin_layout Standard
813 Internal test commands
814 \end_layout
816 \begin_layout Subsubsection
817 take-screenshot <filename>
818 \end_layout
820 \begin_layout Standard
821 Save screenshot to <filename>.
822 \end_layout
824 \begin_layout Subsubsection
825 +controller<num><button>
826 \end_layout
828 \begin_layout Standard
829 Press button <button> on controller <num> (1-8).
830  The following button names are known:
831 \end_layout
833 \begin_layout Itemize
834 left
835 \end_layout
837 \begin_layout Itemize
838 right
839 \end_layout
841 \begin_layout Itemize
843 \end_layout
845 \begin_layout Itemize
846 down
847 \end_layout
849 \begin_layout Itemize
851 \end_layout
853 \begin_layout Itemize
855 \end_layout
857 \begin_layout Itemize
859 \end_layout
861 \begin_layout Itemize
863 \end_layout
865 \begin_layout Itemize
867 \end_layout
869 \begin_layout Itemize
871 \end_layout
873 \begin_layout Itemize
874 select
875 \end_layout
877 \begin_layout Itemize
878 start
879 \end_layout
881 \begin_layout Itemize
882 trigger
883 \end_layout
885 \begin_layout Itemize
886 cursor
887 \end_layout
889 \begin_layout Itemize
890 pause
891 \end_layout
893 \begin_layout Itemize
894 turbo
895 \end_layout
897 \begin_layout Subsubsection
898 controllerh<num><button>
899 \end_layout
901 \begin_layout Standard
902 Hold/unhold button <button> on controller <num> (1-8).
903  See +controller for button names.
904 \end_layout
906 \begin_layout Subsubsection
907 repaint
908 \end_layout
910 \begin_layout Standard
911 Force a repaint.
912 \end_layout
914 \begin_layout Subsection
916 \end_layout
918 \begin_layout Standard
919 Only available if lua support is compiled in.
920 \end_layout
922 \begin_layout Subsubsection
923 eval-lua <luacode>
924 \end_layout
926 \begin_layout Standard
927 Run Lua code <luacode> using built-in Lua interpretter.
928 \end_layout
930 \begin_layout Subsubsection
931 run-lua <script>
932 \end_layout
934 \begin_layout Standard
935 Run specified lua file using built-in Lua interpretter.
936 \end_layout
938 \begin_layout Subsection
939 Memory watch
940 \end_layout
942 \begin_layout Subsubsection
943 add-watch <name> <expression>
944 \end_layout
946 \begin_layout Standard
947 Adds new watch (or modifies old one).
948 \end_layout
950 \begin_layout Subsubsection
951 remove-watch <name>
952 \end_layout
954 \begin_layout Standard
955 Remove a watch.
956 \end_layout
958 \begin_layout Section
959 Settings
960 \end_layout
962 \begin_layout Subsection
963 firmwarepath
964 \end_layout
966 \begin_layout Standard
967 Set where bsnes looks for firmware files.
968  Default is 
969 \begin_inset Quotes eld
970 \end_inset
973 \begin_inset Quotes erd
974 \end_inset
977 \end_layout
979 \begin_layout Subsection
980 targetfps
981 \end_layout
983 \begin_layout Standard
984 Set the target fps.
985  Numeric, range is 0.001 to 
986 \begin_inset Quotes eld
987 \end_inset
989 infinite
990 \begin_inset Quotes erd
991 \end_inset
994  Default is native framerate.
995 \end_layout
997 \begin_layout Subsection
998 savecompression
999 \end_layout
1001 \begin_layout Standard
1002 Set save compression level (integer 0-9).
1003  Default is 7 (0 is no compression).
1004 \end_layout
1006 \begin_layout Subsection
1007 advance-timeout
1008 \end_layout
1010 \begin_layout Standard
1011 Set the frame advance timeout in milliseconds.
1012  Numeric integer, range is 0-999999999.
1013  Default is 500.
1014 \end_layout
1016 \begin_layout Subsection
1017 large-video
1018 \end_layout
1020 \begin_layout Standard
1021 Always dump at 512x448 or 512x478 regardless of what the console outputs.
1022 \end_layout
1024 \begin_layout Section
1025 Lua functions
1026 \end_layout
1028 \begin_layout Subsection
1029 print
1030 \end_layout
1032 \begin_layout Standard
1033 Print line to message console.
1034 \end_layout
1036 \begin_layout Subsection
1037 bit.none(number...) / bit.bnot(number...)
1038 \end_layout
1040 \begin_layout Standard
1041 48-bit bitwise NOT / NONE function (set bits that are set in none of the
1042  arguments).
1043 \end_layout
1045 \begin_layout Subsection
1046 bit.any(number...) / bit.bor(number...)
1047 \end_layout
1049 \begin_layout Standard
1050 48-bit bitwise OR / ANY function (set bits that are set in any of the arguments).
1051 \end_layout
1053 \begin_layout Subsection
1054 bit.all(number...) / bit.band(number...)
1055 \end_layout
1057 \begin_layout Standard
1058 48-bit bitwise AND / ALL function (set bits that are set in all of the arguments
1060 \end_layout
1062 \begin_layout Subsection
1063 bit.parity(number...) / bit.bxor(number...)
1064 \end_layout
1066 \begin_layout Standard
1067 48-bit bitwise XOR / PARITY function (set bits that are set in odd number
1068  of the arguments).
1069 \end_layout
1071 \begin_layout Subsection
1072 bit.lrotate(number base[, number amount[, number bits]])
1073 \end_layout
1075 \begin_layout Standard
1076 Rotate bits-bit (max 48, default 48) number left by amount (default 1) places.
1077 \end_layout
1079 \begin_layout Subsection
1080 bit.rrotate(number base[, number amount[, number bits]])
1081 \end_layout
1083 \begin_layout Standard
1084 Rotate bits-bit (max 48, default 48) number right by amount (default 1)
1085  places.
1086 \end_layout
1088 \begin_layout Subsection
1089 bit.lshift(number base[, number amount[, number bits]])
1090 \end_layout
1092 \begin_layout Standard
1093 Shift bits-bit (max 48, default 48) number left by amount (default 1) places.
1094  The new bits are filled with zeroes.
1095 \end_layout
1097 \begin_layout Subsection
1098 bit.lrshift(number base[, number amount[, number bits]])
1099 \end_layout
1101 \begin_layout Standard
1102 Shift bits-bit (max 48, default 48) number logically right by amount (default
1103  1) places.
1104  The new bits are filled with zeroes.
1105 \end_layout
1107 \begin_layout Subsection
1108 bit.arshift(number base[, number amount[, number bits]])
1109 \end_layout
1111 \begin_layout Standard
1112 Shift bits-bit (max 48, default 48) number arithmetically right by amount
1113  (default 1) places.
1114  The new bits are shifted in with copy of the high bit.
1115 \end_layout
1117 \begin_layout Subsection
1118 gui.resolution()
1119 \end_layout
1121 \begin_layout Standard
1122 Returns 5-tuple (hresolution, vresolution, rshift, gshift, bshift).
1123  Only available in on_paint() and on_video() callbacks.
1124 \end_layout
1126 \begin_layout Subsection
1127 gui.<class>_gap(number gap)
1128 \end_layout
1130 \begin_layout Standard
1131 Set the <class> (left, right, top, bottom) gap to specified value (max gap
1132  is 8191).
1133  Only available in on_paint() and on_video() callbacks.
1134 \end_layout
1136 \begin_layout Subsection
1137 gui.text(number x, number y, string text[, number fgc[, number fga[, number
1138  bgc[, number bga]]]])
1139 \end_layout
1141 \begin_layout Standard
1142 Draw text on the GUI.
1143  Font size is 8(or 16) by 16.
1144  Notes:
1145 \end_layout
1147 \begin_layout Itemize
1148 Coordinate origin is at top-left of the game area.
1149  Left and top gaps have negative coordinates.
1150 \end_layout
1152 \begin_layout Itemize
1153 Use gui.resolution() to discover how to layout colors.
1154 \end_layout
1156 \begin_layout Itemize
1157 Alpha range is 0(transparent)-256(opaque).
1158 \end_layout
1160 \begin_layout Itemize
1161 Only available in on_paint() and on_video() callbacks.
1162 \end_layout
1164 \begin_layout Subsection
1165 gui.repaint()
1166 \end_layout
1168 \begin_layout Standard
1169 Request on_repaint() to happen as soon as possible.
1170 \end_layout
1172 \begin_layout Subsection
1173 gui.subframe_update(boolean on)
1174 \end_layout
1176 \begin_layout Standard
1177 Request subframe updates (calling on_paint() on subframes) to happen (on=true)
1178  or not happen (on=false).
1179 \end_layout
1181 \begin_layout Subsection
1182 input.get(number controller, number index)
1183 \end_layout
1185 \begin_layout Standard
1186 Read the specified index (0-11) from specified controller (0-7).
1187  Notes:
1188 \end_layout
1190 \begin_layout Itemize
1191 Uses physical controller numbering.
1192  Gamepad in port 2 is controller 4, not 1!
1193 \end_layout
1195 \begin_layout Itemize
1196 Only available in on_input callback.
1197 \end_layout
1199 \begin_layout Subsection
1200 input.set(number controller, number index, number value)
1201 \end_layout
1203 \begin_layout Standard
1204 Write the specified index (0-11) from specified controller (0-7), storing
1205  value.
1206  Notes:
1207 \end_layout
1209 \begin_layout Itemize
1210 Uses physical controller numbering.
1211  Gamepad in port 2 is controller 4, not 1!
1212 \end_layout
1214 \begin_layout Itemize
1215 Only available in on_input callback.
1216 \end_layout
1218 \begin_layout Subsection
1219 input.reset([number cycles])
1220 \end_layout
1222 \begin_layout Standard
1223 Execute reset.
1224  If cycles is greater than zero, do delayed reset.
1225 \end_layout
1227 \begin_layout Itemize
1228 Only available in on_input callback with subframe flag false.
1229 \end_layout
1231 \begin_layout Subsection
1232 hostmemory.read(number address)
1233 \end_layout
1235 \begin_layout Standard
1236 Reads hostmemory slot address.
1237  Slot numbers out of range return false instead of numeric.
1238 \end_layout
1240 \begin_layout Subsection
1241 hostmemory.write(number address, number value)
1242 \end_layout
1244 \begin_layout Standard
1245 Writes hostmemory slot with 0-255.
1246  Slot numbers out of range cause extension of host memory slot space.
1247 \end_layout
1249 \begin_layout Subsection
1250 movie.currentframe()
1251 \end_layout
1253 \begin_layout Standard
1254 Return number of current frame.
1255 \end_layout
1257 \begin_layout Subsection
1258 movie.framecount()
1259 \end_layout
1261 \begin_layout Standard
1262 Return number of frames in movie.
1263 \end_layout
1265 \begin_layout Subsection
1266 movie.readonly()
1267 \end_layout
1269 \begin_layout Standard
1270 Return true if in readonly mode, false if in readwrite.
1271 \end_layout
1273 \begin_layout Subsection
1274 movie.set_readwrite()
1275 \end_layout
1277 \begin_layout Standard
1278 Set readwrite mode (does not cause on_readwrite callback).
1279 \end_layout
1281 \begin_layout Subsection
1282 movie.frame_subframes(number frame)
1283 \end_layout
1285 \begin_layout Standard
1286 Count number of subframes in specified frame (frame numbers are 1-based)
1287  and return that.
1288 \end_layout
1290 \begin_layout Subsection
1291 movie.read_subframe(number frame, number subframe)
1292 \end_layout
1294 \begin_layout Standard
1295 Read specifed subframe in specified frame and return data as array (100
1296  elements, numbered 0-99 currently).
1297 \end_layout
1299 \begin_layout Subsection
1300 Callback: on_paint()
1301 \end_layout
1303 \begin_layout Standard
1304 Called when screen is being painted.
1305  Any gui.* calls requiring graphic context draw on the screen.
1306 \end_layout
1308 \begin_layout Subsection
1309 Callback: on_video()
1310 \end_layout
1312 \begin_layout Standard
1313 Called when video dump frame is being painted.
1314  Any gui.* calls requiring graphic context draw on the video.
1315 \end_layout
1317 \begin_layout Subsection
1318 Callback: on_startup()
1319 \end_layout
1321 \begin_layout Standard
1322 Called when the emulator is starting (lsnes.rc has been run).
1323 \end_layout
1325 \begin_layout Subsection
1326 Callback: on_pre_load(string name)
1327 \end_layout
1329 \begin_layout Standard
1330 Called just before savestate/movie load occurs (note: loads are always delayed,
1331  so this occurs even when load was initiated by lua).
1332 \end_layout
1334 \begin_layout Subsection
1335 Callback: on_err_load(string name)
1336 \end_layout
1338 \begin_layout Standard
1339 Called if loadstate goes wrong.
1340 \end_layout
1342 \begin_layout Subsection
1343 Callback: on_post_load(string name, boolean was_savestate)
1344 \end_layout
1346 \begin_layout Standard
1347 Called on successful loadstate.
1348  was_savestate gives if this was a savestate or a movie.
1349 \end_layout
1351 \begin_layout Subsection
1352 Callback: on_pre_save(string name, boolean is_savestate)
1353 \end_layout
1355 \begin_layout Standard
1356 Called just before savestate save occurs (note: movie saves are synchronous
1357  and won't trigger these callbacks if called from Lua).
1358 \end_layout
1360 \begin_layout Subsection
1361 Callback: on_err_save(string name)
1362 \end_layout
1364 \begin_layout Standard
1365 Called if savestate goes wrong.
1366 \end_layout
1368 \begin_layout Subsection
1369 Callback: on_post_save(string name, boolean is_savestate)
1370 \end_layout
1372 \begin_layout Standard
1373 Called on successful savaestate.
1374  is_savestate gives if this was a savestate or a movie.
1375 \end_layout
1377 \begin_layout Subsection
1378 Callback: on_quit()
1379 \end_layout
1381 \begin_layout Standard
1382 Called when emulator is shutting down.
1383 \end_layout
1385 \begin_layout Subsection
1386 Callback: on_input(boolean subframe)
1387 \end_layout
1389 \begin_layout Standard
1390 Called when emulator is just sending input to bsnes core.
1391  Warning: This is called even in readonly mode, but the results are ignored.
1392 \end_layout
1394 \begin_layout Subsection
1395 Callback: on_reset()
1396 \end_layout
1398 \begin_layout Standard
1399 Called when SNES is reset.
1400 \end_layout
1402 \begin_layout Subsection
1403 Callback: on_readwrite()
1404 \end_layout
1406 \begin_layout Standard
1407 Called when moving into readwrite mode as result of 
1408 \begin_inset Quotes eld
1409 \end_inset
1411 set-rwmode
1412 \begin_inset Quotes erd
1413 \end_inset
1415  command (note: moving to rwmode by Lua won't trigger this, as per recursive
1416  entry protection).
1417 \end_layout
1419 \begin_layout Subsection
1420 Callback: on_snoop(number port, number controller, number index, number
1421  value)
1422 \end_layout
1424 \begin_layout Standard
1425 Called each time bsnes asks for input.
1426  The value is the final value to be sent to bsnes core.
1427  Might be useful when translating movies to format suitable for console
1428  verification.
1429 \end_layout
1431 \begin_layout Section
1432 SDL platform:
1433 \end_layout
1435 \begin_layout Subsection
1436 Platform-specific commands:
1437 \end_layout
1439 \begin_layout Subsubsection
1440 enable-sound on
1441 \end_layout
1443 \begin_layout Standard
1444 Enable sounds in GUI (has no effect on video dumping).
1445 \end_layout
1447 \begin_layout Subsubsection
1448 enable-sound off
1449 \end_layout
1451 \begin_layout Standard
1452 Disable sounds in GUI (has no effect on video dumping).
1453 \end_layout
1455 \begin_layout Subsubsection
1456 identify-key
1457 \end_layout
1459 \begin_layout Standard
1460 Asks to press a key and then identifies that key.
1461 \end_layout
1463 \begin_layout Subsubsection
1464 toggle-console
1465 \end_layout
1467 \begin_layout Standard
1468 Toggle between windowed/fullscreen console.
1469 \end_layout
1471 \begin_layout Subsubsection
1472 scroll-fullup
1473 \end_layout
1475 \begin_layout Standard
1476 Scroll messages window as far back as it goes.
1477 \end_layout
1479 \begin_layout Subsubsection
1480 scroll-fulldown
1481 \end_layout
1483 \begin_layout Standard
1484 Scroll messages window as far forward as it goes.
1485 \end_layout
1487 \begin_layout Subsubsection
1488 scroll-up
1489 \end_layout
1491 \begin_layout Standard
1492 Scroll messages window back one screenful.
1493 \end_layout
1495 \begin_layout Subsubsection
1496 scroll-down
1497 \end_layout
1499 \begin_layout Standard
1500 Scroll messages window forward one screenful.
1501 \end_layout
1503 \begin_layout Subsection
1504 Settings
1505 \end_layout
1507 \begin_layout Subsubsection
1508 autorepeat-first-delay
1509 \end_layout
1511 \begin_layout Standard
1512 Sets the delay for first character in typematic autorepeat.
1513 \end_layout
1515 \begin_layout Subsubsection
1516 autorepeat-subsequent-delay
1517 \end_layout
1519 \begin_layout Standard
1520 Sets the delay for subsequent characters in typematic autorepeat.
1521 \end_layout
1523 \begin_layout Subsection
1524 Modifier names
1525 \end_layout
1527 \begin_layout Standard
1528 Following modifier names are known:
1529 \end_layout
1531 \begin_layout Itemize
1532 ctrl, lctrl, rctrl: Control keys
1533 \end_layout
1535 \begin_layout Itemize
1536 alt, lalt, ralt: ALT keys.
1537 \end_layout
1539 \begin_layout Itemize
1540 shift, lshift, rshift: Shift keys.
1541 \end_layout
1543 \begin_layout Itemize
1544 meta, lmeta, rmeta: Meta keys.
1545 \end_layout
1547 \begin_layout Itemize
1548 num, caps: Numlock/Capslock (these are sticky!)
1549 \end_layout
1551 \begin_layout Itemize
1552 mode: Mode select.
1553 \end_layout
1555 \begin_layout Subsection
1556 Key names
1557 \end_layout
1559 \begin_layout Standard
1560 Following key names are known:
1561 \end_layout
1563 \begin_layout Itemize
1564 backspace, tab, clear, return, pause, escape, space, exclaim, quotedbl,
1565  hash, dollar, ampersand, quote, leftparen, rightparen, asterisk, plus,
1566  comma, minus, period, slash, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, colon, semicolon,
1567  less, equals, greater, question, at, leftbracket, backslash, rightbracket,
1568  caret, underscore, backquote, a, b, c, d, e, f, g, h, i, j, k, l, m, n,
1569  o, p, q, r, s, t, u, v, w, x, y, z, delete, world_0, world_1, world_2,
1570  world_3, world_4, world_5, world_6, world_7, world_8, world_9, world_10,
1571  world_11, world_12, world_13, world_14, world_15, world_16, world_17, world_18,
1572  world_19, world_20, world_21, world_22, world_23, world_24, world_25, world_26,
1573  world_27, world_28, world_29, world_30, world_31, world_32, world_33, world_34,
1574  world_35, world_36, world_37, world_38, world_39, world_40, world_41, world_42,
1575  world_43, world_44, world_45, world_46, world_47, world_48, world_49, world_50,
1576  world_51, world_52, world_53, world_54, world_55, world_56, world_57, world_58,
1577  world_59, world_60, world_61, world_62, world_63, world_64, world_65, world_66,
1578  world_67, world_68, world_69, world_70, world_71, world_72, world_73, world_74,
1579  world_75, world_76, world_77, world_78, world_79, world_80, world_81, world_82,
1580  world_83, world_84, world_85, world_86, world_87, world_88, world_89, world_90,
1581  world_91, world_92, world_93, world_94, world_95, kp0, kp1, kp2, kp3, kp4,
1582  kp5, kp6, kp7, kp8, kp9, kp_period, kp_divide, kp_multiply, kp_minus, kp_plus,
1583  kp_enter, kp_equals, up, down, right, left, insert, home, end, pageup,
1584  pagedown, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14,
1585  f15, numlock, capslock, scrollock, rshift, lshift, rctrl, lctrl, ralt,
1586  lalt, rmeta, lmeta, lsuper, rsuper, mode, compose, help, print, sysreq,
1587  break, menu, power, euro, undo
1588 \end_layout
1590 \begin_layout Itemize
1591 Names of form 'key<n>' where <n> is 0-255 are interpretted as key having
1592  hardware-dependent scan code of <n> (useful to bind those keys that don't
1593  have symbolic names).
1594 \end_layout
1596 \begin_layout Standard
1597 In addition, following pseudo-keys are known (note: these do not work yet,
1598  and especially do not work in conjunction with modifers):
1599 \end_layout
1601 \begin_layout Itemize
1602 joystick<num>button<button>: Joystick <num> (0-based) button <button> (0-based).
1603 \end_layout
1605 \begin_layout Itemize
1606 joystick<num>hat<hat>n: Joystick <num> (0-based) hat <hat> (0-based) up.
1607 \end_layout
1609 \begin_layout Itemize
1610 joystick<num>hat<hat>w: Joystick <num> (0-based) hat <hat> (0-based) left.
1611 \end_layout
1613 \begin_layout Itemize
1614 joystick<num>hat<hat>s: Joystick <num> (0-based) hat <hat> (0-based) down.
1615 \end_layout
1617 \begin_layout Itemize
1618 joystick<num>hat<hat>e: Joystick <num> (0-based) hat <hat> (0-based) right.
1619 \end_layout
1621 \begin_layout Itemize
1622 joystick<num>axis<axis>-: Joystick <num> (0-based) axis <axis> negative
1623  position.
1624 \end_layout
1626 \begin_layout Itemize
1627 joystick<num>axis<axis>+: Joystick <num> (0-based) axis <axis> positive
1628  position.
1629 \end_layout
1631 \begin_layout Subsection
1632 Special buttons:
1633 \end_layout
1635 \begin_layout Itemize
1636 Escape: Enter/Exit Command mode, cancel modal dialogs.
1637 \end_layout
1639 \begin_layout Itemize
1640 Return (also KPEnter): Execute command, ok modal dialog.
1641 \end_layout
1643 \begin_layout Itemize
1644 Pgup/Up (also KP8/9 if no num lock; command mode): Previous command in command
1645  history
1646 \end_layout
1648 \begin_layout Itemize
1649 Pgdn/Down(also KP2/3 if no num lock; command mode): Next command in command
1650  history
1651 \end_layout
1653 \begin_layout Itemize
1654 Home (also KP7 if no num lock; command mode): Beginning of command.
1655 \end_layout
1657 \begin_layout Itemize
1658 End (also KP1 if no num lock; command mode): End of command.
1659 \end_layout
1661 \begin_layout Itemize
1662 Left (also KP4 if no num lock; command mode): Move cursor left.
1663 \end_layout
1665 \begin_layout Itemize
1666 Right (also KP6 if no num lock; command mode): Move cursor right.
1667 \end_layout
1669 \begin_layout Itemize
1670 Delete (also KP.
1671  if no num lock; command mode): Delete character to right of cursor.
1672 \end_layout
1674 \begin_layout Itemize
1675 Insert (also KP0 if no num lock; command mode): Toggle between insert /
1676  overwrite modes.
1677 \end_layout
1679 \begin_layout Itemize
1680 Backspace (command mode): Delete character to left of cursor.
1681 \end_layout
1683 \begin_layout Itemize
1684 LCTRL+LALT+ESCAPE: Ungraceful shutdown (leaves dump corrupted!).
1685 \end_layout
1687 \begin_layout Subsection
1688 Watchdog timer:
1689 \end_layout
1691 \begin_layout Standard
1692 If emulator does not reach internal polling loop in 15 seconds after leaving
1693  it or 15 seconds after starting, the emulator instantly bombs out.
1694 \end_layout
1696 \begin_layout Section
1697 Movie file format
1698 \end_layout
1700 \begin_layout Standard
1701 Movie file is .zip archive in itself, normal ZIP archive tools work on it
1702  (note: If you recompress it, do not use compression methods other than
1703  store and deflate and especially do not use encryption of any kind).
1704 \end_layout
1706 \begin_layout Subsection
1707 Detecting clean start/SRAM/Savestate
1708 \end_layout
1710 \begin_layout Itemize
1711 If file has member 
1712 \begin_inset Quotes eld
1713 \end_inset
1715 savestate
1716 \begin_inset Quotes erd
1717 \end_inset
1719  it is savestate, otherwise:
1720 \end_layout
1722 \begin_layout Itemize
1723 If file has members with names starting 
1724 \begin_inset Quotes eld
1725 \end_inset
1727 moviesram.
1728 \begin_inset Quotes erd
1729 \end_inset
1731  it is movie starting from SRAM, otherwise:
1732 \end_layout
1734 \begin_layout Itemize
1735 It is movie starting from clear state.
1736 \end_layout
1738 \begin_layout Subsection
1739 Member: gametype
1740 \end_layout
1742 \begin_layout Standard
1743 Type of game ROM and region.
1744  Valid values are:
1745 \end_layout
1747 \begin_layout Standard
1748 \begin_inset Tabular
1749 <lyxtabular version="3" rows="8" columns="3">
1750 <features tabularvalignment="middle">
1751 <column alignment="center" valignment="top" width="0">
1752 <column alignment="center" valignment="top" width="0">
1753 <column alignment="center" valignment="top" width="0">
1754 <row>
1755 <cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
1756 \begin_inset Text
1758 \begin_layout Plain Layout
1759 Value
1760 \end_layout
1762 \end_inset
1763 </cell>
1764 <cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
1765 \begin_inset Text
1767 \begin_layout Plain Layout
1768 System
1769 \end_layout
1771 \end_inset
1772 </cell>
1773 <cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
1774 \begin_inset Text
1776 \begin_layout Plain Layout
1777 Region
1778 \end_layout
1780 \end_inset
1781 </cell>
1782 </row>
1783 <row>
1784 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1785 \begin_inset Text
1787 \begin_layout Plain Layout
1788 snes_pal
1789 \end_layout
1791 \end_inset
1792 </cell>
1793 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1794 \begin_inset Text
1796 \begin_layout Plain Layout
1797 Super NES
1798 \end_layout
1800 \end_inset
1801 </cell>
1802 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1803 \begin_inset Text
1805 \begin_layout Plain Layout
1807 \end_layout
1809 \end_inset
1810 </cell>
1811 </row>
1812 <row>
1813 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1814 \begin_inset Text
1816 \begin_layout Plain Layout
1817 sgb_pal
1818 \end_layout
1820 \end_inset
1821 </cell>
1822 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1823 \begin_inset Text
1825 \begin_layout Plain Layout
1826 Super Game Boy
1827 \end_layout
1829 \end_inset
1830 </cell>
1831 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1832 \begin_inset Text
1834 \begin_layout Plain Layout
1836 \end_layout
1838 \end_inset
1839 </cell>
1840 </row>
1841 <row>
1842 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1843 \begin_inset Text
1845 \begin_layout Plain Layout
1846 snes_ntsc
1847 \end_layout
1849 \end_inset
1850 </cell>
1851 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1852 \begin_inset Text
1854 \begin_layout Plain Layout
1855 Super NES
1856 \end_layout
1858 \end_inset
1859 </cell>
1860 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1861 \begin_inset Text
1863 \begin_layout Plain Layout
1864 NTSC
1865 \end_layout
1867 \end_inset
1868 </cell>
1869 </row>
1870 <row>
1871 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1872 \begin_inset Text
1874 \begin_layout Plain Layout
1875 sgb_ntsc
1876 \end_layout
1878 \end_inset
1879 </cell>
1880 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1881 \begin_inset Text
1883 \begin_layout Plain Layout
1884 Super Game Boy
1885 \end_layout
1887 \end_inset
1888 </cell>
1889 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1890 \begin_inset Text
1892 \begin_layout Plain Layout
1893 NTSC
1894 \end_layout
1896 \end_inset
1897 </cell>
1898 </row>
1899 <row>
1900 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1901 \begin_inset Text
1903 \begin_layout Plain Layout
1905 \end_layout
1907 \end_inset
1908 </cell>
1909 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1910 \begin_inset Text
1912 \begin_layout Plain Layout
1913 BS-X (non-slotted)
1914 \end_layout
1916 \end_inset
1917 </cell>
1918 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1919 \begin_inset Text
1921 \begin_layout Plain Layout
1922 NTSC
1923 \end_layout
1925 \end_inset
1926 </cell>
1927 </row>
1928 <row>
1929 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1930 \begin_inset Text
1932 \begin_layout Plain Layout
1933 bsxslotted
1934 \end_layout
1936 \end_inset
1937 </cell>
1938 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
1939 \begin_inset Text
1941 \begin_layout Plain Layout
1942 BS-X (slotted)
1943 \end_layout
1945 \end_inset
1946 </cell>
1947 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
1948 \begin_inset Text
1950 \begin_layout Plain Layout
1951 NTSC
1952 \end_layout
1954 \end_inset
1955 </cell>
1956 </row>
1957 <row>
1958 <cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
1959 \begin_inset Text
1961 \begin_layout Plain Layout
1962 sufamiturbo
1963 \end_layout
1965 \end_inset
1966 </cell>
1967 <cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
1968 \begin_inset Text
1970 \begin_layout Plain Layout
1971 Sufami Turbo
1972 \end_layout
1974 \end_inset
1975 </cell>
1976 <cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
1977 \begin_inset Text
1979 \begin_layout Plain Layout
1980 NTSC
1981 \end_layout
1983 \end_inset
1984 </cell>
1985 </row>
1986 </lyxtabular>
1988 \end_inset
1991 \end_layout
1993 \begin_layout Standard
1994 Frame rates are:
1995 \end_layout
1997 \begin_layout Standard
1998 \begin_inset Tabular
1999 <lyxtabular version="3" rows="3" columns="2">
2000 <features tabularvalignment="middle">
2001 <column alignment="center" valignment="top" width="0">
2002 <column alignment="center" valignment="top" width="0">
2003 <row>
2004 <cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
2005 \begin_inset Text
2007 \begin_layout Plain Layout
2008 Region
2009 \end_layout
2011 \end_inset
2012 </cell>
2013 <cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
2014 \begin_inset Text
2016 \begin_layout Plain Layout
2017 Framerate
2018 \end_layout
2020 \end_inset
2021 </cell>
2022 </row>
2023 <row>
2024 <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
2025 \begin_inset Text
2027 \begin_layout Plain Layout
2029 \end_layout
2031 \end_inset
2032 </cell>
2033 <cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
2034 \begin_inset Text
2036 \begin_layout Plain Layout
2037 322445/6448
2038 \end_layout
2040 \end_inset
2041 </cell>
2042 </row>
2043 <row>
2044 <cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
2045 \begin_inset Text
2047 \begin_layout Plain Layout
2048 NTSC
2049 \end_layout
2051 \end_inset
2052 </cell>
2053 <cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
2054 \begin_inset Text
2056 \begin_layout Plain Layout
2057 10738636/178683
2058 \end_layout
2060 \end_inset
2061 </cell>
2062 </row>
2063 </lyxtabular>
2065 \end_inset
2068 \end_layout
2070 \begin_layout Subsection
2071 Member: port1
2072 \end_layout
2074 \begin_layout Standard
2075 Contains type of port #1.
2076  Valid values are 'none', 'gamepad', 'multitap' and 'mouse'.
2077  If not present, defaults to 'gamepad'.
2078 \end_layout
2080 \begin_layout Subsection
2081 Member: port2
2082 \end_layout
2084 \begin_layout Standard
2085 Contains type of port #2.
2086  Valid values are 'none', 'gamepad', 'multitap', 'mouse', 'superscope',
2087  'justifier' and 'justifiers'.
2088  If not present, defaults to 'none'.
2089 \end_layout
2091 \begin_layout Subsection
2092 Member: gamename
2093 \end_layout
2095 \begin_layout Standard
2096 Contains name of the game.
2097 \end_layout
2099 \begin_layout Subsection
2100 Member: authors
2101 \end_layout
2103 \begin_layout Standard
2104 Contains authors, one per line.
2105  Part before '|' is the full name, part after is the nickname.
2106 \end_layout
2108 \begin_layout Subsection
2109 Member: systemid
2110 \end_layout
2112 \begin_layout Standard
2113 Always 
2114 \begin_inset Quotes eld
2115 \end_inset
2117 lsnes-rr1
2118 \begin_inset Quotes erd
2119 \end_inset
2122  Used to reject other saves.
2123 \end_layout
2125 \begin_layout Subsection
2126 Member: controlsversion
2127 \end_layout
2129 \begin_layout Standard
2130 Always 
2131 \begin_inset Quotes eld
2132 \end_inset
2135 \begin_inset Quotes erd
2136 \end_inset
2139  Used to identify what controls are there.
2140 \end_layout
2142 \begin_layout Subsection
2143 Member: 
2144 \begin_inset Quotes eld
2145 \end_inset
2147 coreversion
2148 \begin_inset Quotes erd
2149 \end_inset
2152 \end_layout
2154 \begin_layout Standard
2155 Contains bsnes core version number.
2156 \end_layout
2158 \begin_layout Subsection
2159 Member: projectid
2160 \end_layout
2162 \begin_layout Standard
2163 Contains project ID.
2164  Used to identify if two movies are part of the same project.
2165 \end_layout
2167 \begin_layout Subsection
2168 Member: {rom,slota,slotb}{,xml}.sha256
2169 \end_layout
2171 \begin_layout Standard
2172 Contains SHA-256 of said ROM or ROM mapping file.
2173  Absent if corresponding file is absent.
2174 \end_layout
2176 \begin_layout Subsection
2177 Member: moviesram.<name>
2178 \end_layout
2180 \begin_layout Standard
2181 Raw binary startup SRAM of kind <name>.
2182  Only present in savestates and movies starting from SRAM.
2183 \end_layout
2185 \begin_layout Subsection
2186 Member: moviestate
2187 \end_layout
2189 \begin_layout Standard
2190 Raw binary movie state data.
2191  Only present in savestates.
2192 \end_layout
2194 \begin_layout Standard
2195 for version 0:
2196 \end_layout
2198 \begin_layout Itemize
2199 32 bytes: SHA-256 of project ID.
2200 \end_layout
2202 \begin_layout Itemize
2203 8 bytes: Big-endian current frame.
2204 \end_layout
2206 \begin_layout Itemize
2207 100x4 bytes: Poll counters for each control (bit31 of each is 
2208 \begin_inset Quotes eld
2209 \end_inset
2211 data ready
2212 \begin_inset Quotes erd
2213 \end_inset
2215  bit), big-endian.
2216 \end_layout
2218 \begin_layout Itemize
2219 8 bytes: Big-endian lag frame count.
2220 \end_layout
2222 \begin_layout Itemize
2223 32 bytes: SHA-256 of past input
2224 \end_layout
2226 \begin_layout Itemize
2227 32 bytes: SHA-256 of previous.
2228 \end_layout
2230 \begin_layout Subsection
2231 Member: hostmemory
2232 \end_layout
2234 \begin_layout Standard
2235 Raw binary dump of host memory.
2236  Only present in savestates.
2237 \end_layout
2239 \begin_layout Subsection
2240 Member: savestate
2241 \end_layout
2243 \begin_layout Standard
2244 The savestate itself.
2245  Savestate detection uses this file, only present in savestates.
2246 \end_layout
2248 \begin_layout Subsection
2249 Member: screenshot
2250 \end_layout
2252 \begin_layout Standard
2253 Screenshot of current frame.
2254  Only present in savestates.
2255 \end_layout
2257 \begin_layout Subsection
2258 Member: sram.<name>
2259 \end_layout
2261 \begin_layout Standard
2262 Raw binary SRAM of kind <name> at time of savestate.
2263  Only present in savestates.
2264 \end_layout
2266 \begin_layout Subsection
2267 Member: input
2268 \end_layout
2270 \begin_layout Standard
2271 The actual input track, one line per subframe (blank lines are skipped).
2272 \end_layout
2274 \begin_layout Itemize
2275 If the first byte of each line is '.', ' ', <tab> or '|', then the line is
2276  part of same frame as previous, otherwise it starts a new frame.
2277 \end_layout
2279 \begin_layout Itemize
2280 First subframe must start a new frame.
2281 \end_layout
2283 \begin_layout Standard
2284 Length of movie in frames is number of lines in input file that start a
2285  new frame.
2286 \end_layout
2288 \begin_layout Subsection
2289 Member: rerecords
2290 \end_layout
2292 \begin_layout Standard
2293 Contains textual base-10 rerecord count (emulator just writes this, it doesn't
2294  read it) + 1.
2295 \end_layout
2297 \begin_layout Subsection
2298 Member: rrdata
2299 \end_layout
2301 \begin_layout Standard
2302 This member stores set of load IDs.
2303  There is one load ID per rerecord (plus one corresponding to start of project).
2304 \end_layout
2306 \begin_layout Itemize
2307 This member constists of concatenation of records
2308 \end_layout
2310 \begin_layout Itemize
2311 Each record is 2-36 bytes long and can represent 1-16,843,009 consequtive
2312  IDs.
2313 \end_layout
2315 \begin_layout Itemize
2316 IDs are interpretted as 256-bit big-endian integers with warparound.
2317 \end_layout
2319 \begin_layout Itemize
2320 Initial predicted ID is all zeroes.
2321 \end_layout
2323 \begin_layout Standard
2324 Format of each record is:
2325 \end_layout
2327 \begin_layout Itemize
2328 1 byte: Opcode byte.
2329  Bits 0-4 are prefix length (prefixlen), bits 5-6 are count length (countlen).
2330  Bit 7 is unused.
2331 \end_layout
2333 \begin_layout Itemize
2334 32-prefixlen bytes of ID.
2335 \end_layout
2337 \begin_layout Itemize
2338 countlen bytes of big-endian count (count).
2339 \end_layout
2341 \begin_layout Standard
2342 Records are processed as follows:
2343 \end_layout
2345 \begin_layout Itemize
2346 To form the first ID encoded by record, take the first prefixlen bytes predicted
2347  ID and append the read ID value to it.
2348  The result is the first ID encoded.
2349 \end_layout
2351 \begin_layout Itemize
2352 If countlen is 0, record encodes 1 ID.
2353 \end_layout
2355 \begin_layout Itemize
2356 If countlen is 1, record encodes 2+count IDs.
2357 \end_layout
2359 \begin_layout Itemize
2360 If countlen is 2, record encodes 258+count IDs.
2361 \end_layout
2363 \begin_layout Itemize
2364 If countlen is 3, record encodes 65794+count IDs.
2365 \end_layout
2367 \begin_layout Itemize
2368 The new predicted ID is the next ID after last one encoded by the record.
2369 \end_layout
2371 \begin_layout Standard
2372 The number of rerecords + 1 is equal to the sum of number of IDs encoded
2373  by all records.
2374 \end_layout
2376 \begin_layout Section
2377 Compiling:
2378 \end_layout
2380 \begin_layout Subsection
2381 Building BSNES
2382 \end_layout
2384 \begin_layout Standard
2385 make ui=ui-libsnes options=debugger profile=accuracy
2386 \end_layout
2388 \begin_layout Itemize
2389 Yes, debugger is needed.
2390 \end_layout
2392 \begin_layout Subsection
2393 Prerequisite libraries:
2394 \end_layout
2396 \begin_layout Itemize
2397 zlib
2398 \end_layout
2400 \begin_layout Itemize
2401 SDL (SDL platform)
2402 \end_layout
2404 \begin_layout Itemize
2405 boost_iostreams
2406 \end_layout
2408 \begin_layout Itemize
2409 boost_filesystem
2410 \end_layout
2412 \begin_layout Itemize
2413 boost (conversion)
2414 \end_layout
2416 \begin_layout Subsection
2417 Compile options to make:
2418 \end_layout
2420 \begin_layout Subsubsection
2421 BSNES_PATH=<path>
2422 \end_layout
2424 \begin_layout Standard
2425 Set path to BSNES bsnes directory to <path>.
2426 \end_layout
2428 \begin_layout Subsubsection
2429 NO_THREADS=1
2430 \end_layout
2432 \begin_layout Standard
2433 Don't use threads (makes dumping slower, but threads probably only work
2434  on Linux).
2435 \end_layout
2437 \begin_layout Subsubsection
2438 CC=<compiler>
2439 \end_layout
2441 \begin_layout Standard
2442 (cross) C++ compiler to use.
2443  Defaults to g++-4.5
2444 \end_layout
2446 \begin_layout Subsubsection
2447 HOSTCC=<compiler>
2448 \end_layout
2450 \begin_layout Standard
2451 (host) C++ compiler to use.
2452  Defaults to the same as CC.
2453 \end_layout
2455 \begin_layout Subsubsection
2456 BSNES_IS_COMPAT=1
2457 \end_layout
2459 \begin_layout Standard
2460 Assume BSNES uses compatiblity core instead of accuracy core.
2461 \end_layout
2463 \begin_layout Subsubsection
2464 NO_LUA=1
2465 \end_layout
2467 \begin_layout Standard
2468 Don't compile in Lua support.
2469 \end_layout
2471 \begin_layout Section
2472 Errata:
2473 \end_layout
2475 \begin_layout Subsection
2476 Problems from BSNES core:
2477 \end_layout
2479 \begin_layout Itemize
2480 The whole pending save stuff.
2481 \end_layout
2483 \begin_layout Itemize
2484 Delay resets are slow.
2485 \end_layout
2487 \begin_layout Itemize
2488 RTC is not emulated in sync-stable manner.
2489 \end_layout
2491 \begin_layout Itemize
2492 Lack of layer hiding.
2493 \end_layout
2495 \begin_layout Itemize
2496 It is slow.
2497 \end_layout
2499 \begin_layout Itemize
2500 Firmwares can't be loaded from ZIP archives.
2501 \end_layout
2503 \begin_layout Itemize
2504 Manual polls can be corrupted if savestate occurs during those.
2505 \end_layout
2507 \begin_layout Subsection
2508 TODO For rr0:
2509 \end_layout
2511 \begin_layout Itemize
2512 Make it build on Windows (and build binaries).
2513  Not todo for rr0-β0.
2514 \end_layout
2516 \begin_layout Subsection
2517 Other problems:
2518 \end_layout
2520 \begin_layout Itemize
2521 Audio for last dumped frame is not itself dumped.
2522 \end_layout
2524 \begin_layout Itemize
2525 Audio in UI is pretty bad in quality.
2526 \end_layout
2528 \begin_layout Itemize
2529 UI itself is 30fps max.
2530 \end_layout
2532 \begin_layout Itemize
2533 AVI compression levels 10-18 are not compatible with AVISynth AVISource.
2534 \end_layout
2536 \begin_layout Itemize
2537 No menus, command based interface (SDL).
2538 \end_layout
2540 \begin_layout Itemize
2541 Long commands don't scroll.
2542 \end_layout
2544 \begin_layout Itemize
2545 No autofire
2546 \end_layout
2548 \begin_layout Itemize
2549 Joysticks don't work.
2550 \end_layout
2552 \begin_layout Section
2553 Changelog:
2554 \end_layout
2556 \begin_layout Subsection
2557 rr0-β1
2558 \end_layout
2560 \begin_layout Itemize
2561 Fix -Wall warnings
2562 \end_layout
2564 \begin_layout Itemize
2565 Fix dumper video corruption with levels 10-18.
2566 \end_layout
2568 \end_body
2569 \end_document