diff --git a/include/library/string.hpp b/include/library/string.hpp index 8249bdc4..416a94df 100644 --- a/include/library/string.hpp +++ b/include/library/string.hpp @@ -8,6 +8,7 @@ #include #include #include "utf8.hpp" +#include "int24.hpp" /** * Strip trailing CR if any. @@ -118,6 +119,33 @@ template inline T parse_value(const std::string& value) throw(std::b } } +template<> inline ss_int24_t parse_value(const std::string& value) throw(std::bad_alloc, std::runtime_error) +{ + try { + int32_t v = boost::lexical_cast(value); + if(v < -8388608 || v > 8388607) + throw std::runtime_error("Value out of valid range"); + return v; + } catch(std::exception& e) { + throw std::runtime_error("Can't parse value '" + value + "': " + e.what()); + } +} + +template<> inline ss_uint24_t parse_value(const std::string& value) throw(std::bad_alloc, std::runtime_error) +{ + try { + if(value.length() && value[0] == '-') { + throw std::runtime_error("Unsigned values can't be negative"); + } + uint32_t v = boost::lexical_cast(value); + if(v > 0xFFFFFF) + throw std::runtime_error("Value out of valid range"); + return v; + } catch(std::exception& e) { + throw std::runtime_error("Can't parse value '" + value + "': " + e.what()); + } +} + template<> inline std::string parse_value(const std::string& value) throw(std::bad_alloc, std::runtime_error) { return value; diff --git a/lua.lyx b/lua.lyx index 1c62cf05..d56f25ab 100644 --- a/lua.lyx +++ b/lua.lyx @@ -2237,7 +2237,7 @@ Writes hostmemory slot with value 0-255. \end_layout \begin_layout Subsection -hostmemory.read{,s}{byte,{,d,q}word}: Read from host memory +hostmemory.read{,s}{byte,{,h,d,q}word}: Read from host memory \end_layout \begin_layout Itemize @@ -2256,6 +2256,14 @@ Syntax: number hostmemory.readword(number address) Syntax: number hostmemory.readsword(number address) \end_layout +\begin_layout Itemize +Syntax: number hostmemory.readhword(number address) +\end_layout + +\begin_layout Itemize +Syntax: number hostmemory.readshword(number address) +\end_layout + \begin_layout Itemize Syntax: number hostmemory.readdword(number address) \end_layout @@ -2284,6 +2292,10 @@ byte is 1 element word is 2 elements \end_layout +\begin_layout Itemize +hword is 3 elements +\end_layout + \begin_layout Itemize dword is 4 elements \end_layout @@ -2297,7 +2309,7 @@ The 's' variants do signed read. \end_layout \begin_layout Subsection -hostmemory.write{,s}{byte,{,d,q}word}: Write to host memory +hostmemory.write{,s}{byte,{,h,d,q}word}: Write to host memory \end_layout \begin_layout Itemize @@ -2316,6 +2328,14 @@ Syntax: number hostmemory.writeword(number address, number value) Syntax: number hostmemory.writesword(number address, number value) \end_layout +\begin_layout Itemize +Syntax: number hostmemory.writehword(number address, number value) +\end_layout + +\begin_layout Itemize +Syntax: number hostmemory.writeshword(number address, number value) +\end_layout + \begin_layout Itemize Syntax: number hostmemory.writedword(number address, number value) \end_layout @@ -2345,6 +2365,10 @@ byte is 1 element word is 2 elements \end_layout +\begin_layout Itemize +hword is 3 elements +\end_layout + \begin_layout Itemize dword is 4 elements \end_layout diff --git a/lua.pdf b/lua.pdf index 47773ab0..070dda27 100644 Binary files a/lua.pdf and b/lua.pdf differ diff --git a/manual.lyx b/manual.lyx index 4141aeca..f9543376 100644 --- a/manual.lyx +++ b/manual.lyx @@ -423,6 +423,10 @@ byte: 1 byte word: 2 bytes \end_layout +\begin_layout Itemize +hword: 3 bytes +\end_layout + \begin_layout Itemize dword: 4 bytes \end_layout @@ -1197,6 +1201,10 @@ d : read_signed_dword(a) i : quotent(a / b) \end_layout +\begin_layout Itemize +o: read_signed_hword(a) +\end_layout + \begin_layout Itemize p : \begin_inset Formula $\pi$ @@ -1254,6 +1262,10 @@ H : Set hexadecimal mode with specified number of digits (use A-G for 10-16 digits). \end_layout +\begin_layout Itemize +O: read_unsigned_hword(a) +\end_layout + \begin_layout Itemize Q : read_unsigned_qword(a) \end_layout @@ -2674,10 +2686,6 @@ Problems from BSNES core: The whole pending save stuff. \end_layout -\begin_layout Itemize -Lack of layer hiding. -\end_layout - \begin_layout Itemize It is slow (especially accuracy). \end_layout @@ -2691,7 +2699,7 @@ Other problems: \end_layout \begin_layout Itemize -Modifiers don't work with pseudo-keys (SDL, EVDEV). +Modifiers don't work with pseudo-keys. \end_layout \begin_layout Itemize @@ -2702,2263 +2710,5 @@ Audio for last dumped frame is not itself dumped. Audio in UI is pretty bad in quality if game doesn't run at full speed. \end_layout -\begin_layout Itemize -No menus, command based interface (SDL). -\end_layout - -\begin_layout Itemize -Long commands don't scroll. -\end_layout - -\begin_layout Section -Changelog: -\end_layout - -\begin_layout Subsection -rr0-beta1 -\end_layout - -\begin_layout Itemize -Fix -Wall warnings -\end_layout - -\begin_layout Itemize -Fix dumper video corruption with levels 10-18. -\end_layout - -\begin_layout Subsection -rr0-beta2 -\end_layout - -\begin_layout Itemize -Autofire -\end_layout - -\begin_layout Itemize -Lots of code cleanups -\end_layout - -\begin_layout Itemize -Lua interface to settings -\end_layout - -\begin_layout Itemize -Allow specifying AVI borders without Lua -\end_layout - -\begin_layout Itemize -Fix scaling if vscale > 1 and originx > 0 (left border exists) -\end_layout - -\begin_layout Itemize -on_snoop lua callback -\end_layout - -\begin_layout Itemize -Faster movie loading and saving. -\end_layout - -\begin_layout Subsection -rr0-beta3 -\end_layout - -\begin_layout Itemize -Joystick support -\end_layout - -\begin_layout Subsection -rr0-beta4 -\end_layout - -\begin_layout Itemize -Fix multi-buttons -\end_layout - -\begin_layout Itemize -Save jukebox functionality. -\end_layout - -\begin_layout Subsection -rr0-beta5 -\end_layout - -\begin_layout Itemize -Try to fix some nasty failing movie load edge cases -\end_layout - -\begin_layout Itemize -Allow specifying scripts to run on command line. -\end_layout - -\begin_layout Subsection -rr0-beta6 -\end_layout - -\begin_layout Itemize -Major source code reorganization. -\end_layout - -\begin_layout Itemize -Backup savestates before overwriting. -\end_layout - -\begin_layout Itemize -Don't crash if loading initial state fails. -\end_layout - -\begin_layout Subsection -rr0-beta7 -\end_layout - -\begin_layout Itemize -Fix firmware lookup -\end_layout - -\begin_layout Itemize -Fix author name parsing -\end_layout - -\begin_layout Itemize -Fix rerecord counting -\end_layout - -\begin_layout Itemize -(SDL) Print messages to console if SDL is uninitialized -\end_layout - -\begin_layout Itemize -Add movieinfo program -\end_layout - -\begin_layout Itemize -Fix loading movies starting from SRAM. -\end_layout - -\begin_layout Subsection -rr0-beta8 -\end_layout - -\begin_layout Itemize -Add support for unattended dumping -\end_layout - -\begin_layout Itemize -Fix compiling for Win32 -\end_layout - -\begin_layout Itemize -Don't lock up if sound can't be initialized -\end_layout - -\begin_layout Itemize -Strip trailing CR from commands -\end_layout - -\begin_layout Itemize -Don't try to do dubious things in global ctors (fix crash on startup) -\end_layout - -\begin_layout Subsection -rr0-beta9 -\end_layout - -\begin_layout Itemize -Small documentation tweaking -\end_layout - -\begin_layout Itemize -Fix make clean -\end_layout - -\begin_layout Itemize -Fix major bug in modifier matching -\end_layout - -\begin_layout Subsection -rr0-beta10 -\end_layout - -\begin_layout Itemize -Lots of documentation fixes -\end_layout - -\begin_layout Itemize -Use dedicated callbacks for event backcomm., not commands. -\end_layout - -\begin_layout Itemize -Ensure that the watchdog is not hit when executing delayed reset. -\end_layout - -\begin_layout Itemize -Remove errant tab from joystick message. -\end_layout - -\begin_layout Subsection -rr0-beta11 -\end_layout - -\begin_layout Itemize -Make autofire operate in absolute time, not linear time -\end_layout - -\begin_layout Itemize -Reinitialize controls when resuming from loadstate -\end_layout - -\begin_layout Itemize -Some more code cleanups -\end_layout - -\begin_layout Itemize -If Lua allocator fails, call OOM_panic() -\end_layout - -\begin_layout Itemize -Byte/word/dword/qword sized host memory write/read functions. -\end_layout - -\begin_layout Itemize -Dump at correct framerate if dumping interlaced NTSC (height=448). -\end_layout - -\begin_layout Subsection -rr0-beta12 -\end_layout - -\begin_layout Itemize -Actually include the complete source code -\end_layout - -\begin_layout Itemize -Keep track of RTC -\end_layout - -\begin_layout Subsection -rr0-beta13 -\end_layout - -\begin_layout Itemize -Document {save,start}time.{,sub}second. -\end_layout - -\begin_layout Itemize -Intercept time() from bsnes core. -\end_layout - -\begin_layout Subsection -rr0-beta14 -\end_layout - -\begin_layout Itemize -Allow disabling time() interception (allow build on Mac OS X) -\end_layout - -\begin_layout Itemize -Use SDLMain on Mac OS X (make SDL not crash) -\end_layout - -\begin_layout Itemize -Disable delayed resets (just plain too buggy for now). -\end_layout - -\begin_layout Itemize -Code cleanups -\end_layout - -\begin_layout Itemize -Use 16-bit for graphics/video instead of 32-bit. -\end_layout - -\begin_layout Itemize -gui.rectangle/gui.pixel -\end_layout - -\begin_layout Itemize -gui.crosshair -\end_layout - -\begin_layout Itemize -New CSCD writer implementation. -\end_layout - -\begin_layout Subsection -rr0-beta15 -\end_layout - -\begin_layout Itemize -Fix interaction of * and +. -\end_layout - -\begin_layout Itemize -Manual improvements -\end_layout - -\begin_layout Itemize -Use gettimeofday()/usleep(), these seem portable enough. -\end_layout - -\begin_layout Itemize -Move joystick axis manipulation to keymapper code. -\end_layout - -\begin_layout Itemize -Changes to how read-only works. -\end_layout - -\begin_layout Itemize -Refactor controller input code. -\end_layout - -\begin_layout Subsection -rr0-beta16 -\end_layout - -\begin_layout Itemize -Fix mouseclick scale compensation. -\end_layout - -\begin_layout Itemize -Draw area boundaries correctly in SDL code. -\end_layout - -\begin_layout Itemize -gui.screenshot. -\end_layout - -\begin_layout Itemize -Fix CSCD output (buffer overrun and race condition). -\end_layout - -\begin_layout Subsection -rr0-beta17 -\end_layout - -\begin_layout Itemize -JMD dumping support. -\end_layout - -\begin_layout Itemize -Allow unattended dumping to JMD. -\end_layout - -\begin_layout Itemize -Move to BSNES v083. -\end_layout - -\begin_layout Itemize -Switch back to 32-bit colors. -\end_layout - -\begin_layout Itemize -Add Lua function gui.color. -\end_layout - -\begin_layout Itemize -Use some new C++11 features in GCC 4.6. -\end_layout - -\begin_layout Itemize -Be prepared for core frequency changes. -\end_layout - -\begin_layout Itemize -Pass colors in one chunk from Lua. -\end_layout - -\begin_layout Subsection -rr0-beta18 -\end_layout - -\begin_layout Itemize -New lua functions gui.line(), gui.status() and gui.circle(), memory.vma_count(), - memory.read_vma() and memory.find_vma(). -\end_layout - -\begin_layout Itemize -Numerious documentation fixups -\end_layout - -\begin_layout Itemize -RTC time format changed -\end_layout - -\begin_layout Itemize -Reformat flags display -\end_layout - -\begin_layout Itemize -Allow lua package name to be overridden -\end_layout - -\begin_layout Itemize -SDUMP (high-quality dumping). -\end_layout - -\begin_layout Itemize -Split platform support to plugins. -\end_layout - -\begin_layout Itemize -Make all sound plugins support basic sound commands -\end_layout - -\begin_layout Itemize -Support portaudio for sound. -\end_layout - -\begin_layout Itemize -Allow disable Lua/SDL searching. -\end_layout - -\begin_layout Itemize -Upconvert colors when copying lcscreen to screen. -\end_layout - -\begin_layout Itemize -Reorganize source tree. -\end_layout - -\begin_layout Itemize -Evdev joystick support. -\end_layout - -\begin_layout Itemize -Refactor more code into generic window code. -\end_layout - -\begin_layout Subsection -rr0-beta19 -\end_layout - -\begin_layout Itemize -Refactor message handling. -\end_layout - -\begin_layout Itemize -Rework makefile -\end_layout - -\begin_layout Itemize -Documentation fixes -\end_layout - -\begin_layout Itemize -Finish pending saves before load/quit. -\end_layout - -\begin_layout Itemize -Wxwidgets graphics plugin. -\end_layout - -\begin_layout Subsection -rr0-beta20 -\end_layout - -\begin_layout Itemize -Get rid of win32-crap.[ch]pp. -\end_layout - -\begin_layout Itemize -Move files around a lot. -\end_layout - -\begin_layout Itemize -Get rid of need for host C++ compiler. -\end_layout - -\begin_layout Itemize -Bsnes v084 core. -\end_layout - -\begin_layout Itemize -Refactor inter-component communication. -\end_layout - -\begin_layout Itemize -Fix zero luma. -\end_layout - -\begin_layout Itemize -Fix crash on multiline aliases. -\end_layout - -\begin_layout Itemize -Load/Save settings in wxwidgets gui. -\end_layout - -\begin_layout Subsection -rr0-beta21 -\end_layout - -\begin_layout Itemize -Patch problems in bsnes core -\end_layout - -\begin_layout Itemize -SNES is little-endian, not big-endian! -\end_layout - -\begin_layout Itemize -Fix memory corruption in lcscreen::load() -\end_layout - -\begin_layout Subsection -rr0-beta22 -\end_layout - -\begin_layout Itemize -Fix interpretting repeat counts in rrdata loading. -\end_layout - -\begin_layout Itemize -New lua callback: on_frame() -\end_layout - -\begin_layout Itemize -Remove calls to runtosave() that aren't supposed to be there -\end_layout - -\begin_layout Itemize -Lua function: movie.read_rtc() -\end_layout - -\begin_layout Itemize -Ignore src/fonts/font.cpp -\end_layout - -\begin_layout Itemize -Fix more bsnes core problems -\end_layout - -\begin_layout Itemize -Control bsnes random seeding -\end_layout - -\begin_layout Itemize -Pause-on-end -\end_layout - -\begin_layout Itemize -Some bsnes core debugging features (state dump and state hash) -\end_layout - -\begin_layout Itemize -Fix titlebar version number (no, the last version wasn't 'lsnes-0-beta21', - it was 'lsnes rr0-beta21'). -\end_layout - -\begin_layout Subsection -rr0-beta23 -\end_layout - -\begin_layout Itemize -Fix memory corruption due to macro/field mixup -\end_layout - -\begin_layout Itemize -search-memory update -\end_layout - -\begin_layout Itemize -Allow direct-mapped framebuffer -\end_layout - -\begin_layout Itemize -SDL: Use SDL_ANYFORMAT if possible -\end_layout - -\begin_layout Itemize -SDMP2SOX: 2s delay modes. -\end_layout - -\begin_layout Itemize -Wxwidgets: Cleanups -\end_layout - -\begin_layout Itemize -Use sed -E, not sed -r. - Fixes building on Mac OS X. -\end_layout - -\begin_layout Itemize -Wxwidgets: Save jukebox on exit -\end_layout - -\begin_layout Itemize -Fix RTC if using load-movie on savestate. -\end_layout - -\begin_layout Itemize -Fix crash related to full console mode. -\end_layout - -\begin_layout Subsection -rr0-beta24 -\end_layout - -\begin_layout Itemize -Wxwidgets: Allow bringing application to foreground on Mac OS X. -\end_layout - -\begin_layout Itemize -Wxwidgets: Allow compiling on Mac OS X. -\end_layout - -\begin_layout Itemize -Use movie compare instead of movie hashing (faster save/load). -\end_layout - -\begin_layout Itemize -Lua: _SYSTEM table. -\end_layout - -\begin_layout Subsection -rr0-beta25 -\end_layout - -\begin_layout Itemize -sdmp2sox: Pad soundtrack if using -l or -L. -\end_layout - -\begin_layout Itemize -sdmp2sox: Fix NTSC overscan. -\end_layout - -\begin_layout Itemize -sdmp2sox: Add AR correction mode. -\end_layout - -\begin_layout Itemize -call lua_close() when exiting. -\end_layout - -\begin_layout Itemize -Fix zip_writer bug causing warnings from info-zip and error from advzip. -\end_layout - -\begin_layout Subsection -rr0-beta26 -\end_layout - -\begin_layout Itemize -Fix IPS patching code (use bsnes core IPS patcher). -\end_layout - -\begin_layout Itemize -Implement BPS patching (using bsnes core IPS patcher). -\end_layout - -\begin_layout Itemize -Add feature to load headered ROMs. -\end_layout - -\begin_layout Subsection -rr0-beta27 -\end_layout - -\begin_layout Itemize -Show command names when showing keybindings -\end_layout - -\begin_layout Subsection -rr0 -\end_layout - -\begin_layout Itemize -Fix pause-on-end to be actually controllable -\end_layout - -\begin_layout Itemize -SDL: Poll all events in queue, not just first one (fixes slowness in command - typing) -\end_layout - -\begin_layout Itemize -Wxwidgets: Fix ROM loading. -\end_layout - -\begin_layout Subsection -rr1-beta0 -\end_layout - -\begin_layout Itemize -Lua: Add gui.textH, gui.textV, gui.textHV -\end_layout - -\begin_layout Itemize -Fix text colors on SDL on Mac OS X -\end_layout - -\begin_layout Itemize -Mode 'F' for finished in readonly mode. -\end_layout - -\begin_layout Itemize -Fix some WS errors. -\end_layout - -\begin_layout Itemize -Reliably pause after skip poll -\end_layout - -\begin_layout Itemize -Split UI and core into their own threads -\end_layout - -\begin_layout Subsection -rr1-beta1 -\end_layout - -\begin_layout Itemize -Remove leftover dummy SRAM slot -\end_layout - -\begin_layout Itemize -Fix controller numbers. -\end_layout - -\begin_layout Subsection -rr1-beta2 -\end_layout - -\begin_layout Itemize -Fix lsnes-dumpavi after interface change. -\end_layout - -\begin_layout Itemize -Also give BSNES patches for v085. -\end_layout - -\begin_layout Itemize -Pack movie data in memory. -\end_layout - -\begin_layout Subsection -rr1-beta3 -\end_layout - -\begin_layout Itemize -Fix framecount/length given when loading movies. -\end_layout - -\begin_layout Itemize -Controller command memory leak fixes. -\end_layout - -\begin_layout Itemize -Don't leak palette if freeing screen object. -\end_layout - -\begin_layout Subsection -rr1-beta4 -\end_layout - -\begin_layout Itemize -Detect revisions. -\end_layout - -\begin_layout Itemize -Wxwidgets: Allow controlling dumper from the menu. -\end_layout - -\begin_layout Subsection -rr1-beta5 -\end_layout - -\begin_layout Itemize -Rewrite parts of manual -\end_layout - -\begin_layout Itemize -Lua: Make it work with Lua 5.2. -\end_layout - -\begin_layout Subsection -rr1-beta6 -\end_layout - -\begin_layout Itemize -Win32: Fix compile errors. -\end_layout - -\begin_layout Subsection -rr1-beta7 -\end_layout - -\begin_layout Itemize -Refactor controller input code. -\end_layout - -\begin_layout Itemize -Fix crash when using command line on SDL / Mac OS X. -\end_layout - -\begin_layout Subsection -rr1-beta8 -\end_layout - -\begin_layout Itemize -Delete core/coroutine (obsolete) -\end_layout - -\begin_layout Itemize -Lag input display by one frame. -\end_layout - -\begin_layout Itemize -Rewind movie to beginning function. -\end_layout - -\begin_layout Itemize -Fix wrong frame number reported to Lua when repainting after loadstate -\end_layout - -\begin_layout Itemize -Support UI editing of jukebox -\end_layout - -\begin_layout Itemize -Wxwidgets: Save settings on exit. -\end_layout - -\begin_layout Itemize -Support ${project} for filenames -\end_layout - -\begin_layout Itemize -SDL: Fix command history -\end_layout - -\begin_layout Subsection -rr1-beta9 -\end_layout - -\begin_layout Itemize -Fix some order-of-global-ctor bugs. -\end_layout - -\begin_layout Subsection -rr1-beta10 -\end_layout - -\begin_layout Itemize -Fix crashes when quitting on Win32. -\end_layout - -\begin_layout Subsection -rr1-beta11 -\end_layout - -\begin_layout Itemize -EVDEV: Queue keypresses from joystick, don't send directly -\end_layout - -\begin_layout Itemize -Wxwidgets: Load-Preserve that actually works. -\end_layout - -\begin_layout Subsection -rr1-beta12 -\end_layout - -\begin_layout Itemize -Wxwidgets: GUI for memory search. -\end_layout - -\begin_layout Itemize -Warn about using synchronous queue in UI callback. -\end_layout - -\begin_layout Subsection -rr1-beta13 -\end_layout - -\begin_layout Itemize -Remember last saved file for each ROM -\end_layout - -\begin_layout Itemize -Support MT dumping via boost. -\end_layout - -\begin_layout Itemize -Lua: input.raw -\end_layout - -\begin_layout Itemize -Lua: input.keyhook -\end_layout - -\begin_layout Itemize -Make mouse be ordinary input instead of special-casing -\end_layout - -\begin_layout Itemize -SDL: Don't screw up commands with NUL codepoints. -\end_layout - -\begin_layout Subsection -rr1-beta14 -\end_layout - -\begin_layout Itemize -Merge status panel and main window -\end_layout - -\begin_layout Itemize -True movie slot support (the rest of it) -\end_layout - -\begin_layout Itemize -SDL: Fix compilation error -\end_layout - -\begin_layout Itemize -Elminate cross calls in dump menu code. -\end_layout - -\begin_layout Subsection -rr1-beta15 -\end_layout - -\begin_layout Itemize -Cancel pending saves command -\end_layout - -\begin_layout Itemize -Wxwidgets: Code refactoring -\end_layout - -\begin_layout Itemize -Wxwidgets: Fix system -> reset -\end_layout - -\begin_layout Itemize -Wxwidgets: Read watch expressions in the right thread -\end_layout - -\begin_layout Subsection -rr1-beta16 -\end_layout - -\begin_layout Itemize -Wxwidgets: Don't prompt for member when running Lua script (Lua doesn't - support that). -\end_layout - -\begin_layout Itemize -Wxwidgets: 128 -> 1024 Autohold slots (in case more are needed). -\end_layout - -\begin_layout Itemize -Don't append trailing '-' to prefix when saving movie. -\end_layout - -\begin_layout Itemize -Fix ROM/savestate handling (don't let user mismatch ROM and savestates). -\end_layout - -\begin_layout Subsection -rr1 -\end_layout - -\begin_layout Itemize -Document memory watch syntax. -\end_layout - -\begin_layout Subsection -rr1-delta1 -\end_layout - -\begin_layout Itemize -Fix unattended dumping (lsnes-dumpavi) -\end_layout - -\begin_layout Itemize -Support RAW dumping -\end_layout - -\begin_layout Itemize -Use adv_dumper instead of the old interface in lsnes-dumpavi (changes syntax) -\end_layout - -\begin_layout Itemize -Add option to control sample rate preturbation in AVI dumper -\end_layout - -\begin_layout Subsection -rr1-delta2 -\end_layout - -\begin_layout Itemize -Wxwidgets: Fix dumper submodes -\end_layout - -\begin_layout Itemize -Set core controller types before loadstate -\end_layout - -\begin_layout Subsection -rr1-delta2epsilon1 -\end_layout - -\begin_layout Itemize -Fix compiling with bsnes v086. -\end_layout - -\begin_layout Subsection -rr1-delta3 -\end_layout - -\begin_layout Itemize -Don't prompt before quitting -\end_layout - -\begin_layout Itemize -Start unpaused, preserve pause/unpause over load. -\end_layout - -\begin_layout Itemize -Try to autodetect if ROM is headered. -\end_layout - -\begin_layout Itemize -Wxwidgets: Only bring up ROM patching screen if specifically requested. -\end_layout - -\begin_layout Itemize -Allow configuring some hotkeys. -\end_layout - -\begin_layout Subsection -rr1-delta4 -\end_layout - -\begin_layout Itemize -Lots of code cleanups -\end_layout - -\begin_layout Itemize -Fix JMD compression (JMD dumping was broken) -\end_layout - -\begin_layout Itemize -Don't crash if Lua C function throws an exception. -\end_layout - -\begin_layout Itemize -Support bitmap drawing in Lua. -\end_layout - -\begin_layout Itemize -Fix bsnes v085/v086 patches. -\end_layout - -\begin_layout Itemize -Improve stability on win32. -\end_layout - -\begin_layout Subsection -rr1-delta4epsilon1 -\end_layout - -\begin_layout Itemize -Don't corrupt movie if movie length is integer multiple of frames per page. -\end_layout - -\begin_layout Subsection -rr1-delta5 -\end_layout - -\begin_layout Itemize -New Lua hooks: on_rewind, on_frame_emulated, on_idle, on_timer -\end_layout - -\begin_layout Itemize -New Lua functions: emulator_ready(), utime(), set_idle_timeout(), set_timer_time -out(), bit.extract(), bit.value(), input.geta(), input.seta() and input.controllertyp -e() -\end_layout - -\begin_layout Itemize -Wxwidgets: Fix internal focus lost (hotkeys stop working) -\end_layout - -\begin_layout Itemize -Wxwidgets: Fix broken modifiers -\end_layout - -\begin_layout Itemize -on_paint has parameter now. -\end_layout - -\begin_layout Itemize -Optional initital fill for bitmaps -\end_layout - -\begin_layout Itemize -Fix palette changing. -\end_layout - -\begin_layout Itemize -Optimize rendering a bit. -\end_layout - -\begin_layout Itemize -Bsnes v087 support. -\end_layout - -\begin_layout Subsection -rr1-delta5epsilon1 -\end_layout - -\begin_layout Itemize -Movieinfo: Fix display of port #2 type. -\end_layout - -\begin_layout Itemize -Call on_input() after loadstate. -\end_layout - -\begin_layout Subsection -rr1-delta5epsilon2 -\end_layout - -\begin_layout Itemize -Fix writing port2 data to movie. -\end_layout - -\begin_layout Itemize -Fix SRAM handling with Bsnes v087. -\end_layout - -\begin_layout Subsection -rr1-delta6 -\end_layout - -\begin_layout Itemize -Library loading support -\end_layout - -\begin_layout Itemize -Built-in TSCC encoder -\end_layout - -\begin_layout Itemize -Hi-color (256T colors) dumping. -\end_layout - -\begin_layout Itemize -Dump over TCP/IP(v6) -\end_layout - -\begin_layout Itemize -Hidable status panel -\end_layout - -\begin_layout Itemize -Turbo toggle/hold -\end_layout - -\begin_layout Itemize -Adjustable sound volume -\end_layout - -\begin_layout Itemize -Screen scaling -\end_layout - -\begin_layout Itemize -Allow DnD into filename boxes -\end_layout - -\begin_layout Itemize -Configurable paths -\end_layout - -\begin_layout Itemize -Portaudio: Fix speaker popping at start -\end_layout - -\begin_layout Itemize -Lots of UI changes -\end_layout - -\begin_layout Itemize -Speed adjustment menu -\end_layout - -\begin_layout Itemize -Win32 joystick support -\end_layout - -\begin_layout Itemize -Lua: gui.rainbow and gui.box -\end_layout - -\begin_layout Itemize -Split key lists into classes (the key list was large!) -\end_layout - -\begin_layout Itemize -More save slots support -\end_layout - -\begin_layout Itemize -Wxwidgets (wxJoystick) joystick support -\end_layout - -\begin_layout Subsection -rr1-delta7 -\end_layout - -\begin_layout Itemize -Lots of internal joystick refactoring -\end_layout - -\begin_layout Itemize -Evdev: Add mapping for BTN_TOOL_QUINTTAP -\end_layout - -\begin_layout Itemize -Wxwidgets: Settings mode (open settings without ROM) -\end_layout - -\begin_layout Itemize -Wxwidgets: Prompt key to use option -\end_layout - -\begin_layout Itemize -Wxwidgets: Fix crash if key goes away underneath -\end_layout - -\begin_layout Itemize -Wxwidgets: Fix mouse position in presence of scaling -\end_layout - -\begin_layout Itemize -AVI dumper: Mode 4 (high-quality resampling to common rate using SRC) -\end_layout - -\begin_layout Itemize -Wxwidgets: Redesign hotkeys dialog to avoid tree control (tree control doesn't - seem to work well on WinXP) -\end_layout - -\begin_layout Itemize -Start paused option. -\end_layout - -\begin_layout Subsection -rr1-delta7epsilon1 -\end_layout - -\begin_layout Itemize -AVI: ZMBV support -\end_layout - -\begin_layout Itemize -lsnes-dumpavi: Start Lua before starting dumper -\end_layout - -\begin_layout Itemize -AVI: Fix secondary audio in mode 4. -\end_layout - -\begin_layout Subsection -rr1-delta7epsilon2 -\end_layout - -\begin_layout Itemize -AVI: Refactor ZMBV a bit. -\end_layout - -\begin_layout Itemize -Fix error reading analog values from movie file -\end_layout - -\begin_layout Subsection -rr1-delta8 -\end_layout - -\begin_layout Itemize -Delayed reset support -\end_layout - -\begin_layout Itemize -Lua: memory.hash_region -\end_layout - -\begin_layout Subsection -rr1-delta8epsilon1 -\end_layout - -\begin_layout Itemize -Rework the build system -\end_layout - -\begin_layout Itemize -Typing input support -\end_layout - -\begin_layout Itemize -Fix building with bsnes v086 and v087. -\end_layout - -\begin_layout Itemize -SDL: Save settings on exit -\end_layout - -\begin_layout Itemize -SDL: Command to enter command line mode with given command. -\end_layout - -\begin_layout Itemize -SDL: More advanced command editing. -\end_layout - -\begin_layout Subsection -rr1-delta9 -\end_layout - -\begin_layout Itemize -wxMSW: Fix the -\begin_inset Quotes eld -\end_inset - -arrow keys and enter don't work -\begin_inset Quotes erd -\end_inset - - problem -\end_layout - -\begin_layout Itemize -MSU-1 support -\end_layout - -\begin_layout Itemize -Show mode changes due to rewinding. -\end_layout - -\begin_layout Itemize -Unsafe rewind support -\end_layout - -\begin_layout Itemize -Fix directory transversal. -\end_layout - -\begin_layout Subsection -rr1-delta10 -\end_layout - -\begin_layout Itemize -AVI: Sound mode 5 (48kHz high-quality) -\end_layout - -\begin_layout Itemize -Lua: Reset Lua VM -\end_layout - -\begin_layout Itemize -Map the SNES bus into address space -\end_layout - -\begin_layout Itemize -Fix loading memory watch files with CRLF line endings -\end_layout - -\begin_layout Subsection -rr1-delta10epsilon1 -\end_layout - -\begin_layout Itemize -Map bsnes internal state into memory space -\end_layout - -\begin_layout Itemize -Fix the -\begin_inset Quotes eld -\end_inset - -click on panel wedges the emulator -\begin_inset Quotes erd -\end_inset - - for real. -\end_layout - -\begin_layout Itemize -DnD movies/saves on the main window. -\end_layout - -\begin_layout Subsection -rr1-delta11 -\end_layout - -\begin_layout Itemize -Split core bindings into own module. -\end_layout - -\begin_layout Itemize -Remember invalid settings -\end_layout - -\begin_layout Itemize -Support for modified Gambatte core for GB/GBC emulation. -\end_layout - -\begin_layout Itemize -Reload/swap ROM function -\end_layout - -\begin_layout Subsection -rr1-delta11epsilon1 -\end_layout - -\begin_layout Itemize -Fix step poll function -\end_layout - -\begin_layout Subsection -rr1-delta12 -\end_layout - -\begin_layout Itemize -Non-insane savestate anchoring -\end_layout - -\begin_layout Subsection -rr1-delta13 -\end_layout - -\begin_layout Itemize -More Memory search methods -\end_layout - -\begin_layout Itemize -Preserve movie if loading in RO mode. -\end_layout - -\begin_layout Itemize -Fix a obscure case in timeline check -\end_layout - -\begin_layout Itemize -Revamp the entiere ROM loading code -\end_layout - -\begin_layout Itemize -Support DnD on ROMs -\end_layout - -\begin_layout Itemize -Revamp menu layout -\end_layout - -\begin_layout Itemize -Standalone hotkey config dialog -\end_layout - -\begin_layout Itemize -Show bindings in more user-friendly format -\end_layout - -\begin_layout Subsection -rr1-delta13epsilon1 -\end_layout - -\begin_layout Itemize -Pipedec support -\end_layout - -\begin_layout Itemize -Fix uninitialized variables in bsnes v085 -\end_layout - -\begin_layout Subsection -rr1-delta14 -\end_layout - -\begin_layout Itemize -Merge gambatte core into mainline (from its own branch) -\end_layout - -\begin_layout Itemize -Wxwidgets: Show expected dump file formats -\end_layout - -\begin_layout Itemize -Memory watch: Data typing -\end_layout - -\begin_layout Itemize -lsnes internal MMIO area. -\end_layout - -\begin_layout Itemize -Wxwidgets: New memory watch editor -\end_layout - -\begin_layout Itemize -Hexadecimal memory watches -\end_layout - -\begin_layout Itemize -Wxwidgets: Monospaced panel -\end_layout - -\begin_layout Itemize -Wxwidgets: Split memory watches in panel -\end_layout - -\begin_layout Itemize -Wxwidgets: Disable VMAs in memory search -\end_layout - -\begin_layout Itemize -lsnes-dumpavi: Fix speed bug -\end_layout - -\begin_layout Itemize -Movie subtitle support -\end_layout - -\begin_layout Itemize -Fix rerecord count reporting -\end_layout - -\begin_layout Itemize -Don't trash movie when loading in readonly mode. -\end_layout - -\begin_layout Subsection -rr1-delta14epsilon1 -\end_layout - -\begin_layout Itemize -Wxwidgets: Fix crashes on closing settings dialogs on Mac OS X. -\end_layout - -\begin_layout Itemize -Fix build on Mac OS X. -\end_layout - -\begin_layout Itemize -Lua: loopwrapper -\end_layout - -\begin_layout Itemize -Wxwidgets: Hidable messages window -\end_layout - -\begin_layout Itemize -Lua: input.joyset -\end_layout - -\begin_layout Itemize -Bsnes: Support inconsistent saves -\end_layout - -\begin_layout Itemize -Bsnes: Allow simulating saving every frame -\end_layout - -\begin_layout Itemize -Fix desync if savestate is loaded in readonly mode in certain conditions. -\end_layout - -\begin_layout Itemize -Wxwidgets: Fix save dialogs on Mac OS X. -\end_layout - -\begin_layout Itemize -Wxwidgets: Fix insane status width on Win32. -\end_layout - -\begin_layout Itemize -Wxwidgets: Fix autohold processing to be faster. -\end_layout - -\begin_layout Itemize -Wxwidgets: Allow loading ROMs and movies from commandline. -\end_layout - -\begin_layout Subsection -rr1-delta15 -\end_layout - -\begin_layout Itemize -Be a bit smarter with --load -\end_layout - -\begin_layout Itemize -Rewrote higher-level parts of audio system -\end_layout - -\begin_layout Itemize -Tool to build commentary tracks -\end_layout - -\begin_layout Itemize -Lua: input.joyget -\end_layout - -\begin_layout Itemize -Gambatte: Add support for SVN358 -\end_layout - -\begin_layout Itemize -Use builtin font when rendering status panel. -\end_layout - -\begin_layout Itemize -Option to detach memory watch to its own window. -\end_layout - -\begin_layout Itemize -Recent ROMs/Movies menu -\end_layout - -\begin_layout Itemize -Libao support -\end_layout - -\begin_layout Itemize -Useful lag counter for SNES games that autopoll -\end_layout - -\begin_layout Itemize -Fix buffer overflow in gambatte sound output -\end_layout - -\begin_layout Subsection -rr1-delta15epsilon1 -\end_layout - -\begin_layout Itemize -Don't blow up on wxGTK if the window is hidden somehow -\end_layout - -\begin_layout Itemize -Support simultaneous drop of ROM and movie. -\end_layout - -\begin_layout Itemize -Gambatte: Don't save spurious SRAMs. -\end_layout - -\begin_layout Itemize -Make SGB ROMs actually usable. -\end_layout - -\begin_layout Itemize -Fix so that saved movies appear in recent movies. -\end_layout - -\begin_layout Itemize -Don't open multiple commentary editors at once. -\end_layout - -\begin_layout Subsection -rr1-delta15epsilon2 -\end_layout - -\begin_layout Itemize -Lua: memory.readregion/memory.writeregion -\end_layout - -\begin_layout Itemize -Lua: memory.map{,s}{byte,word,dword,qword} -\end_layout - -\begin_layout Itemize -Lua: memory.map_structure -\end_layout - -\begin_layout Itemize -Lua: Fix bus_address for gambatte -\end_layout - -\begin_layout Itemize -Fix features dependent of bsnes debugger -\end_layout - -\begin_layout Itemize -Cleanup bsnes debugger logic -\end_layout - -\begin_layout Itemize -Fix resets in presence of save every frame -\end_layout - -\begin_layout Subsection -rr1-delta15epsilon3 -\end_layout - -\begin_layout Itemize -Lua: input.lcid_to_pcid -\end_layout - -\begin_layout Itemize -Fix off-by-one bug with slot hashes -\end_layout - -\begin_layout Itemize -Fix crashes on certain memory watch expressions -\end_layout - -\begin_layout Itemize -Lua: memory.read_expr -\end_layout - -\begin_layout Itemize -Lua: Fix memory.read_expr on nil argument -\end_layout - -\begin_layout Itemize -Fix the code to compile on G++ 4.7 -\end_layout - -\begin_layout Itemize -Change button_id to be a function pointer field, not a virtual method -\end_layout - -\begin_layout Itemize -Add bsnes patches to fix libsnes to compile on GCC 4.7 -\end_layout - -\begin_layout Itemize -Gambatte: Always use legacy lag counting -\end_layout - -\begin_layout Itemize -Memory commands: Memory addresses are up to 16 hex digits, not up to 8 -\end_layout - -\begin_layout Itemize -Fix analog controllers -\end_layout - -\begin_layout Itemize -Fix autohold menus -\end_layout - -\begin_layout Itemize -Fix button symbols in input display -\end_layout - -\begin_layout Itemize -Compensate for nuts bsnes superscope/justifier handling -\end_layout - -\begin_layout Itemize -Lua: Fix bit.extract boolean handling -\end_layout - -\begin_layout Subsection -rr2-beta0 -\end_layout - -\begin_layout Itemize -Split emulation cores more from the rest -\end_layout - -\begin_layout Itemize -Support having multiple emulation cores compiled at once -\end_layout - -\begin_layout Itemize -Support arbitrary number of ports (well, up to 31 anyway). -\end_layout - -\begin_layout Itemize -SNES debugger support -\end_layout - -\begin_layout Itemize -Support 16-button controllers -\end_layout - -\begin_layout Itemize -Remove old SDL front end -\end_layout - -\begin_layout Itemize -Data-driven controller buttons -\end_layout - -\begin_layout Itemize -Generate the port code from defines -\end_layout - -\begin_layout Subsection -rr2-beta1 -\end_layout - -\begin_layout Itemize -Update libgambatte to SVN364 -\end_layout - -\begin_layout Itemize -Get rid of partial linking (building with MXE works) -\end_layout - -\begin_layout Itemize -Load XML even without gamepack files -\end_layout - -\begin_layout Itemize -Support screen rotate & flip -\end_layout - -\begin_layout Itemize -Fix bug when changing controller key to another subkey of the same key -\end_layout - -\begin_layout Subsection -rr1-delta16 -\end_layout - -\begin_layout Itemize -Stop at movie end: Don't off-by-one -\end_layout - -\begin_layout Itemize -Fix crash closing lsnes with voice playback active. -\end_layout - -\begin_layout Itemize -Import/Export OggOpus for commentary tracks -\end_layout - -\begin_layout Itemize -16-button controllers. -\end_layout - -\begin_layout Itemize -Don't show nonexistent controllers in input display -\end_layout - -\begin_layout Itemize -Set voice record/playback volume from UI -\end_layout - -\begin_layout Itemize -Patches for gambatte SVN364. -\end_layout - -\begin_layout Itemize -Load markup (if exists) even without gamepack file. -\end_layout - -\begin_layout Itemize -Screen rotation & flipping -\end_layout - -\begin_layout Itemize -Lua: Some new bit functions -\end_layout - -\begin_layout Itemize -Auto-refresh voice streams on change. -\end_layout - -\begin_layout Itemize -Auto-refresh subtitles on change & new subtitle editor. -\end_layout - -\begin_layout Itemize -Fix music volume adjustment. -\end_layout - -\begin_layout Subsection -rr2-beta2 -\end_layout - -\begin_layout Itemize -Use system threads instead of platform threads -\end_layout - -\begin_layout Itemize -Cleanup build by allowing dummy and real drivers to link together. -\end_layout - -\begin_layout Itemize -Split duplex support -\end_layout - -\begin_layout Subsection -rr1-delta16epsilon1 -\end_layout - -\begin_layout Itemize -Wxwidgets: Fix memory watch rendering. -\end_layout - -\begin_layout Itemize -Wxwidgets: Allow setting voice stream gain. -\end_layout - -\begin_layout Itemize -Wxwidgets: VU meters and volume adjustment. -\end_layout - -\begin_layout Itemize -Lua: Custom fonts support. -\end_layout - -\begin_layout Itemize -Lua: Fix methods stopping working when resetting Lua. -\end_layout - -\begin_layout Itemize -Fix loading standard-format movies in preserve (readonly) mode. -\end_layout - -\begin_layout Subsection -rr1-delta17 -\end_layout - -\begin_layout Itemize -Primitive movie editor -\end_layout - -\begin_layout Itemize -Fix VU meter with no sound device. -\end_layout - -\begin_layout Itemize -Fix various undefined return values. -\end_layout - -\begin_layout Itemize -Show rates in VU meter window. -\end_layout - -\begin_layout Subsection -rr2-beta3 -\end_layout - -\begin_layout Itemize -Lua: Render queues as objects -\end_layout - -\begin_layout Itemize -Bsnes: support hard resets -\end_layout - -\begin_layout Itemize -Dedicated sound devices dialog -\end_layout - -\begin_layout Itemize -Change the default AVI sound mode to 2 or 5. -\end_layout - -\begin_layout Itemize -Fix totally borked movie saving. -\end_layout - -\begin_layout Itemize -Portaudio: Use split duplex with different devices. -\end_layout - -\begin_layout Itemize -Fix controls with gambatte core. -\end_layout - -\begin_layout Itemize -Modify save slot set handling. -\end_layout - -\begin_layout Itemize -lsnes-dumpavi: --firmware-path. -\end_layout - -\begin_layout Itemize -Fix lots of compiler warnings. -\end_layout - -\begin_layout Subsection -rr1-delta17epsilon1 -\end_layout - -\begin_layout Itemize -Commentary tool: Set nominal bit rate and limit max bit rate. -\end_layout - -\begin_layout Itemize -Lua: Unconditionally reload host memory on loadstate -\end_layout - -\begin_layout Itemize -Lua: Query bindings, manipulate aliases, create inverse bindings -\end_layout - -\begin_layout Itemize -Lua: Fix crashes with resetting VM while some types of paint requests are - in flight. -\end_layout - -\begin_layout Itemize -Lua: gui.text: Clip the text properly instead of corrupting memory in some - cases. -\end_layout - -\begin_layout Itemize -Save screenshot header reliably -\end_layout - -\begin_layout Itemize -Lua: Backport input.get2 and input.set2 -\end_layout - -\begin_layout Itemize -Lua: New controller info functions. -\end_layout - -\begin_layout Itemize -Movie editor: Fix reset delay counters to be the right way around. -\end_layout - -\begin_layout Itemize -Lua: on_snoop2 -\end_layout - -\begin_layout Itemize -Lua: on_button and input.veto_button. -\end_layout - -\begin_layout Subsection -rr2-beta4 -\end_layout - -\begin_layout Itemize -Revert memory leak fix breaking input -\end_layout - -\begin_layout Itemize -Refactor Opus handling -\end_layout - -\begin_layout Itemize -Restrict member picking only to .zip files -\end_layout - -\begin_layout Itemize -Fix reading of host-endian VMAs. -\end_layout - -\begin_layout Itemize -Fix rlow and rhigh to be the right way around. -\end_layout - -\begin_layout Itemize -Lua: Don't wedge VM if callback fails with an exception -\end_layout - -\begin_layout Itemize -Refactor Ogg handling. -\end_layout - -\begin_layout Subsection -rr1-delta17epsilon2 -\end_layout - -\begin_layout Itemize -Fix saving PNG screenshots on Win32. -\end_layout - -\begin_layout Itemize -Movie editor: Sweep axis. -\end_layout - -\begin_layout Itemize -Load selected slot in ro/rw/preserve/movie mode. -\end_layout - -\begin_layout Itemize -input.joyset: Preserve and invert user input. -\end_layout - -\begin_layout Itemize -Allow immediate saving at point of save (transfer saves). -\end_layout - -\begin_layout Itemize -Wxwidgets: Filter filenames in dialogs, autoappend extensions. -\end_layout - -\begin_layout Itemize -data/verysmall.font: Add missing glyph 70 ( -\begin_inset Quotes eld -\end_inset - -F -\begin_inset Quotes erd -\end_inset - -). -\end_layout - -\begin_layout Itemize -Lua: Allow painting custom fonts with halo. -\end_layout - -\begin_layout Itemize -Fix memory value search to work on byte types. -\end_layout - -\begin_layout Subsection -rr2-beta5 -\end_layout - -\begin_layout Itemize -Reject oggopus files with incomplete pregap -\end_layout - -\begin_layout Itemize -Fix multistream and ogg demuxing -\end_layout - -\begin_layout Itemize -Workaround bug with screen >1024 pixels wide. -\end_layout - -\begin_layout Itemize -Allow on_input to force/veto system controls. -\end_layout - -\begin_layout Itemize -Dedicated autohold/autofire window. -\end_layout - -\begin_layout Itemize -Support per-button autofire. -\end_layout - -\begin_layout Itemize -Fix crash on trying to frameadvance/exit with no ROM loaded. -\end_layout - -\begin_layout Itemize -Fix nonexistent controller key warnings. -\end_layout - -\begin_layout Itemize -Movie editor: Fix mouse editing (TYPE_RAXIS) -\end_layout - -\begin_layout Itemize -TAS input plugin -\end_layout - -\begin_layout Itemize -Analog passthrough. -\end_layout - -\begin_layout Itemize -Add throttle axes (TYPE_TAXIS). -\end_layout - -\begin_layout Itemize -Fix movie reading with first port having multiple controllers. -\end_layout - -\begin_layout Itemize -Move some info from status panel to statusbar. -\end_layout - -\begin_layout Subsection -rr1-delta17epsilon3 -\end_layout - -\begin_layout Itemize -Fix status panel (and movie editor) flicker -\end_layout - -\begin_layout Itemize -Show effects of Lua in input display -\end_layout - -\begin_layout Itemize -Offer lsmv.backup as file filter too for load lsmv -\end_layout - -\begin_layout Itemize -Allow slowing down subframe advance -\end_layout - -\begin_layout Itemize -Display current save slot information -\end_layout - -\begin_layout Itemize -Add snes9x fonts -\end_layout - -\begin_layout Itemize -Fix hotkeys stopping working after X-ing settings dialog -\end_layout - -\begin_layout Itemize -Movie editor: Fix bug if extending finished movie -\end_layout - -\begin_layout Itemize -Cap current_frame_first_subframe to movie size when recounting movie -\end_layout - -\begin_layout Itemize -Movie editor: Interpret ctrl+click as right click -\end_layout - -\begin_layout Subsection -rr2-beta6 -\end_layout - -\begin_layout Itemize -Autofire: Fix false status indications -\end_layout - -\begin_layout Itemize -Fix subframe counter -\end_layout - -\begin_layout Itemize -Fix print() after Lua reset -\end_layout - -\begin_layout Itemize -New settings framework -\end_layout - -\begin_layout Itemize -Remove some unused leftover stuff -\end_layout - -\begin_layout Itemize -Fix race condition causing possible crash on startup -\end_layout - -\begin_layout Itemize -Fix compiling if uint64_t and size_t are not compatible -\end_layout - -\begin_layout Itemize -Lua: Don't crash if input.[gs]et{,a} is called outside on_input -\end_layout - -\begin_layout Subsection -rr2-beta7 -\end_layout - -\begin_layout Itemize -Fix bug causing crash if triple has invalid button -\end_layout - \end_body \end_document diff --git a/manual.txt b/manual.txt index de360502..f4027b22 100644 --- a/manual.txt +++ b/manual.txt @@ -182,6 +182,8 @@ The available element are: • word: 2 bytes +• hword: 3 bytes + • dword: 4 bytes • qword: 8 bytes @@ -1180,1160 +1182,16 @@ set-axis joystick0axis19 disabled • The whole pending save stuff. -• Lack of layer hiding. - • It is slow (especially accuracy). • Firmwares can't be loaded from ZIP archives. 16.2 Other problems: -• Modifiers don't work with pseudo-keys (SDL, EVDEV). +• Modifiers don't work with pseudo-keys. • Audio for last dumped frame is not itself dumped. • Audio in UI is pretty bad in quality if game doesn't run at full speed. -• No menus, command based interface (SDL). - -• Long commands don't scroll. - -17 Changelog: - -17.1 rr0-beta1 - -• Fix -Wall warnings - -• Fix dumper video corruption with levels 10-18. - -17.2 rr0-beta2 - -• Autofire - -• Lots of code cleanups - -• Lua interface to settings - -• Allow specifying AVI borders without Lua - -• Fix scaling if vscale > 1 and originx > 0 (left border exists) - -• on_snoop lua callback - -• Faster movie loading and saving. - -17.3 rr0-beta3 - -• Joystick support - -17.4 rr0-beta4 - -• Fix multi-buttons - -• Save jukebox functionality. - -17.5 rr0-beta5 - -• Try to fix some nasty failing movie load edge cases - -• Allow specifying scripts to run on command line. - -17.6 rr0-beta6 - -• Major source code reorganization. - -• Backup savestates before overwriting. - -• Don't crash if loading initial state fails. - -17.7 rr0-beta7 - -• Fix firmware lookup - -• Fix author name parsing - -• Fix rerecord counting - -• (SDL) Print messages to console if SDL is uninitialized - -• Add movieinfo program - -• Fix loading movies starting from SRAM. - -17.8 rr0-beta8 - -• Add support for unattended dumping - -• Fix compiling for Win32 - -• Don't lock up if sound can't be initialized - -• Strip trailing CR from commands - -• Don't try to do dubious things in global ctors (fix crash on - startup) - -17.9 rr0-beta9 - -• Small documentation tweaking - -• Fix make clean - -• Fix major bug in modifier matching - -17.10 rr0-beta10 - -• Lots of documentation fixes - -• Use dedicated callbacks for event backcomm., not commands. - -• Ensure that the watchdog is not hit when executing delayed - reset. - -• Remove errant tab from joystick message. - -17.11 rr0-beta11 - -• Make autofire operate in absolute time, not linear time - -• Reinitialize controls when resuming from loadstate - -• Some more code cleanups - -• If Lua allocator fails, call OOM_panic() - -• Byte/word/dword/qword sized host memory write/read functions. - -• Dump at correct framerate if dumping interlaced NTSC - (height=448). - -17.12 rr0-beta12 - -• Actually include the complete source code - -• Keep track of RTC - -17.13 rr0-beta13 - -• Document {save,start}time.{,sub}second. - -• Intercept time() from bsnes core. - -17.14 rr0-beta14 - -• Allow disabling time() interception (allow build on Mac OS X) - -• Use SDLMain on Mac OS X (make SDL not crash) - -• Disable delayed resets (just plain too buggy for now). - -• Code cleanups - -• Use 16-bit for graphics/video instead of 32-bit. - -• gui.rectangle/gui.pixel - -• gui.crosshair - -• New CSCD writer implementation. - -17.15 rr0-beta15 - -• Fix interaction of * and +. - -• Manual improvements - -• Use gettimeofday()/usleep(), these seem portable enough. - -• Move joystick axis manipulation to keymapper code. - -• Changes to how read-only works. - -• Refactor controller input code. - -17.16 rr0-beta16 - -• Fix mouseclick scale compensation. - -• Draw area boundaries correctly in SDL code. - -• gui.screenshot. - -• Fix CSCD output (buffer overrun and race condition). - -17.17 rr0-beta17 - -• JMD dumping support. - -• Allow unattended dumping to JMD. - -• Move to BSNES v083. - -• Switch back to 32-bit colors. - -• Add Lua function gui.color. - -• Use some new C++11 features in GCC 4.6. - -• Be prepared for core frequency changes. - -• Pass colors in one chunk from Lua. - -17.18 rr0-beta18 - -• New lua functions gui.line(), gui.status() and gui.circle(), - memory.vma_count(), memory.read_vma() and memory.find_vma(). - -• Numerious documentation fixups - -• RTC time format changed - -• Reformat flags display - -• Allow lua package name to be overridden - -• SDUMP (high-quality dumping). - -• Split platform support to plugins. - -• Make all sound plugins support basic sound commands - -• Support portaudio for sound. - -• Allow disable Lua/SDL searching. - -• Upconvert colors when copying lcscreen to screen. - -• Reorganize source tree. - -• Evdev joystick support. - -• Refactor more code into generic window code. - -17.19 rr0-beta19 - -• Refactor message handling. - -• Rework makefile - -• Documentation fixes - -• Finish pending saves before load/quit. - -• Wxwidgets graphics plugin. - -17.20 rr0-beta20 - -• Get rid of win32-crap.[ch]pp. - -• Move files around a lot. - -• Get rid of need for host C++ compiler. - -• Bsnes v084 core. - -• Refactor inter-component communication. - -• Fix zero luma. - -• Fix crash on multiline aliases. - -• Load/Save settings in wxwidgets gui. - -17.21 rr0-beta21 - -• Patch problems in bsnes core - -• SNES is little-endian, not big-endian! - -• Fix memory corruption in lcscreen::load() - -17.22 rr0-beta22 - -• Fix interpretting repeat counts in rrdata loading. - -• New lua callback: on_frame() - -• Remove calls to runtosave() that aren't supposed to be there - -• Lua function: movie.read_rtc() - -• Ignore src/fonts/font.cpp - -• Fix more bsnes core problems - -• Control bsnes random seeding - -• Pause-on-end - -• Some bsnes core debugging features (state dump and state hash) - -• Fix titlebar version number (no, the last version wasn't - 'lsnes-0-beta21', it was 'lsnes rr0-beta21'). - -17.23 rr0-beta23 - -• Fix memory corruption due to macro/field mixup - -• search-memory update - -• Allow direct-mapped framebuffer - -• SDL: Use SDL_ANYFORMAT if possible - -• SDMP2SOX: 2s delay modes. - -• Wxwidgets: Cleanups - -• Use sed -E, not sed -r. Fixes building on Mac OS X. - -• Wxwidgets: Save jukebox on exit - -• Fix RTC if using load-movie on savestate. - -• Fix crash related to full console mode. - -17.24 rr0-beta24 - -• Wxwidgets: Allow bringing application to foreground on Mac OS - X. - -• Wxwidgets: Allow compiling on Mac OS X. - -• Use movie compare instead of movie hashing (faster save/load). - -• Lua: _SYSTEM table. - -17.25 rr0-beta25 - -• sdmp2sox: Pad soundtrack if using -l or -L. - -• sdmp2sox: Fix NTSC overscan. - -• sdmp2sox: Add AR correction mode. - -• call lua_close() when exiting. - -• Fix zip_writer bug causing warnings from info-zip and error - from advzip. - -17.26 rr0-beta26 - -• Fix IPS patching code (use bsnes core IPS patcher). - -• Implement BPS patching (using bsnes core IPS patcher). - -• Add feature to load headered ROMs. - -17.27 rr0-beta27 - -• Show command names when showing keybindings - -17.28 rr0 - -• Fix pause-on-end to be actually controllable - -• SDL: Poll all events in queue, not just first one (fixes - slowness in command typing) - -• Wxwidgets: Fix ROM loading. - -17.29 rr1-beta0 - -• Lua: Add gui.textH, gui.textV, gui.textHV - -• Fix text colors on SDL on Mac OS X - -• Mode 'F' for finished in readonly mode. - -• Fix some WS errors. - -• Reliably pause after skip poll - -• Split UI and core into their own threads - -17.30 rr1-beta1 - -• Remove leftover dummy SRAM slot - -• Fix controller numbers. - -17.31 rr1-beta2 - -• Fix lsnes-dumpavi after interface change. - -• Also give BSNES patches for v085. - -• Pack movie data in memory. - -17.32 rr1-beta3 - -• Fix framecount/length given when loading movies. - -• Controller command memory leak fixes. - -• Don't leak palette if freeing screen object. - -17.33 rr1-beta4 - -• Detect revisions. - -• Wxwidgets: Allow controlling dumper from the menu. - -17.34 rr1-beta5 - -• Rewrite parts of manual - -• Lua: Make it work with Lua 5.2. - -17.35 rr1-beta6 - -• Win32: Fix compile errors. - -17.36 rr1-beta7 - -• Refactor controller input code. - -• Fix crash when using command line on SDL / Mac OS X. - -17.37 rr1-beta8 - -• Delete core/coroutine (obsolete) - -• Lag input display by one frame. - -• Rewind movie to beginning function. - -• Fix wrong frame number reported to Lua when repainting after - loadstate - -• Support UI editing of jukebox - -• Wxwidgets: Save settings on exit. - -• Support ${project} for filenames - -• SDL: Fix command history - -17.38 rr1-beta9 - -• Fix some order-of-global-ctor bugs. - -17.39 rr1-beta10 - -• Fix crashes when quitting on Win32. - -17.40 rr1-beta11 - -• EVDEV: Queue keypresses from joystick, don't send directly - -• Wxwidgets: Load-Preserve that actually works. - -17.41 rr1-beta12 - -• Wxwidgets: GUI for memory search. - -• Warn about using synchronous queue in UI callback. - -17.42 rr1-beta13 - -• Remember last saved file for each ROM - -• Support MT dumping via boost. - -• Lua: input.raw - -• Lua: input.keyhook - -• Make mouse be ordinary input instead of special-casing - -• SDL: Don't screw up commands with NUL codepoints. - -17.43 rr1-beta14 - -• Merge status panel and main window - -• True movie slot support (the rest of it) - -• SDL: Fix compilation error - -• Elminate cross calls in dump menu code. - -17.44 rr1-beta15 - -• Cancel pending saves command - -• Wxwidgets: Code refactoring - -• Wxwidgets: Fix system -> reset - -• Wxwidgets: Read watch expressions in the right thread - -17.45 rr1-beta16 - -• Wxwidgets: Don't prompt for member when running Lua script (Lua - doesn't support that). - -• Wxwidgets: 128 -> 1024 Autohold slots (in case more are - needed). - -• Don't append trailing '-' to prefix when saving movie. - -• Fix ROM/savestate handling (don't let user mismatch ROM and - savestates). - -17.46 rr1 - -• Document memory watch syntax. - -17.47 rr1-delta1 - -• Fix unattended dumping (lsnes-dumpavi) - -• Support RAW dumping - -• Use adv_dumper instead of the old interface in lsnes-dumpavi - (changes syntax) - -• Add option to control sample rate preturbation in AVI dumper - -17.48 rr1-delta2 - -• Wxwidgets: Fix dumper submodes - -• Set core controller types before loadstate - -17.49 rr1-delta2epsilon1 - -• Fix compiling with bsnes v086. - -17.50 rr1-delta3 - -• Don't prompt before quitting - -• Start unpaused, preserve pause/unpause over load. - -• Try to autodetect if ROM is headered. - -• Wxwidgets: Only bring up ROM patching screen if specifically - requested. - -• Allow configuring some hotkeys. - -17.51 rr1-delta4 - -• Lots of code cleanups - -• Fix JMD compression (JMD dumping was broken) - -• Don't crash if Lua C function throws an exception. - -• Support bitmap drawing in Lua. - -• Fix bsnes v085/v086 patches. - -• Improve stability on win32. - -17.52 rr1-delta4epsilon1 - -• Don't corrupt movie if movie length is integer multiple of - frames per page. - -17.53 rr1-delta5 - -• New Lua hooks: on_rewind, on_frame_emulated, on_idle, on_timer - -• New Lua functions: emulator_ready(), utime(), - set_idle_timeout(), set_timer_timeout(), bit.extract(), - bit.value(), input.geta(), input.seta() and - input.controllertype() - -• Wxwidgets: Fix internal focus lost (hotkeys stop working) - -• Wxwidgets: Fix broken modifiers - -• on_paint has parameter now. - -• Optional initital fill for bitmaps - -• Fix palette changing. - -• Optimize rendering a bit. - -• Bsnes v087 support. - -17.54 rr1-delta5epsilon1 - -• Movieinfo: Fix display of port #2 type. - -• Call on_input() after loadstate. - -17.55 rr1-delta5epsilon2 - -• Fix writing port2 data to movie. - -• Fix SRAM handling with Bsnes v087. - -17.56 rr1-delta6 - -• Library loading support - -• Built-in TSCC encoder - -• Hi-color (256T colors) dumping. - -• Dump over TCP/IP(v6) - -• Hidable status panel - -• Turbo toggle/hold - -• Adjustable sound volume - -• Screen scaling - -• Allow DnD into filename boxes - -• Configurable paths - -• Portaudio: Fix speaker popping at start - -• Lots of UI changes - -• Speed adjustment menu - -• Win32 joystick support - -• Lua: gui.rainbow and gui.box - -• Split key lists into classes (the key list was large!) - -• More save slots support - -• Wxwidgets (wxJoystick) joystick support - -17.57 rr1-delta7 - -• Lots of internal joystick refactoring - -• Evdev: Add mapping for BTN_TOOL_QUINTTAP - -• Wxwidgets: Settings mode (open settings without ROM) - -• Wxwidgets: Prompt key to use option - -• Wxwidgets: Fix crash if key goes away underneath - -• Wxwidgets: Fix mouse position in presence of scaling - -• AVI dumper: Mode 4 (high-quality resampling to common rate - using SRC) - -• Wxwidgets: Redesign hotkeys dialog to avoid tree control (tree - control doesn't seem to work well on WinXP) - -• Start paused option. - -17.58 rr1-delta7epsilon1 - -• AVI: ZMBV support - -• lsnes-dumpavi: Start Lua before starting dumper - -• AVI: Fix secondary audio in mode 4. - -17.59 rr1-delta7epsilon2 - -• AVI: Refactor ZMBV a bit. - -• Fix error reading analog values from movie file - -17.60 rr1-delta8 - -• Delayed reset support - -• Lua: memory.hash_region - -17.61 rr1-delta8epsilon1 - -• Rework the build system - -• Typing input support - -• Fix building with bsnes v086 and v087. - -• SDL: Save settings on exit - -• SDL: Command to enter command line mode with given command. - -• SDL: More advanced command editing. - -17.62 rr1-delta9 - -• wxMSW: Fix the “arrow keys and enter don't work” problem - -• MSU-1 support - -• Show mode changes due to rewinding. - -• Unsafe rewind support - -• Fix directory transversal. - -17.63 rr1-delta10 - -• AVI: Sound mode 5 (48kHz high-quality) - -• Lua: Reset Lua VM - -• Map the SNES bus into address space - -• Fix loading memory watch files with CRLF line endings - -17.64 rr1-delta10epsilon1 - -• Map bsnes internal state into memory space - -• Fix the “click on panel wedges the emulator” for real. - -• DnD movies/saves on the main window. - -17.65 rr1-delta11 - -• Split core bindings into own module. - -• Remember invalid settings - -• Support for modified Gambatte core for GB/GBC emulation. - -• Reload/swap ROM function - -17.66 rr1-delta11epsilon1 - -• Fix step poll function - -17.67 rr1-delta12 - -• Non-insane savestate anchoring - -17.68 rr1-delta13 - -• More Memory search methods - -• Preserve movie if loading in RO mode. - -• Fix a obscure case in timeline check - -• Revamp the entiere ROM loading code - -• Support DnD on ROMs - -• Revamp menu layout - -• Standalone hotkey config dialog - -• Show bindings in more user-friendly format - -17.69 rr1-delta13epsilon1 - -• Pipedec support - -• Fix uninitialized variables in bsnes v085 - -17.70 rr1-delta14 - -• Merge gambatte core into mainline (from its own branch) - -• Wxwidgets: Show expected dump file formats - -• Memory watch: Data typing - -• lsnes internal MMIO area. - -• Wxwidgets: New memory watch editor - -• Hexadecimal memory watches - -• Wxwidgets: Monospaced panel - -• Wxwidgets: Split memory watches in panel - -• Wxwidgets: Disable VMAs in memory search - -• lsnes-dumpavi: Fix speed bug - -• Movie subtitle support - -• Fix rerecord count reporting - -• Don't trash movie when loading in readonly mode. - -17.71 rr1-delta14epsilon1 - -• Wxwidgets: Fix crashes on closing settings dialogs on Mac OS X. - -• Fix build on Mac OS X. - -• Lua: loopwrapper - -• Wxwidgets: Hidable messages window - -• Lua: input.joyset - -• Bsnes: Support inconsistent saves - -• Bsnes: Allow simulating saving every frame - -• Fix desync if savestate is loaded in readonly mode in certain - conditions. - -• Wxwidgets: Fix save dialogs on Mac OS X. - -• Wxwidgets: Fix insane status width on Win32. - -• Wxwidgets: Fix autohold processing to be faster. - -• Wxwidgets: Allow loading ROMs and movies from commandline. - -17.72 rr1-delta15 - -• Be a bit smarter with --load - -• Rewrote higher-level parts of audio system - -• Tool to build commentary tracks - -• Lua: input.joyget - -• Gambatte: Add support for SVN358 - -• Use builtin font when rendering status panel. - -• Option to detach memory watch to its own window. - -• Recent ROMs/Movies menu - -• Libao support - -• Useful lag counter for SNES games that autopoll - -• Fix buffer overflow in gambatte sound output - -17.73 rr1-delta15epsilon1 - -• Don't blow up on wxGTK if the window is hidden somehow - -• Support simultaneous drop of ROM and movie. - -• Gambatte: Don't save spurious SRAMs. - -• Make SGB ROMs actually usable. - -• Fix so that saved movies appear in recent movies. - -• Don't open multiple commentary editors at once. - -17.74 rr1-delta15epsilon2 - -• Lua: memory.readregion/memory.writeregion - -• Lua: memory.map{,s}{byte,word,dword,qword} - -• Lua: memory.map_structure - -• Lua: Fix bus_address for gambatte - -• Fix features dependent of bsnes debugger - -• Cleanup bsnes debugger logic - -• Fix resets in presence of save every frame - -17.75 rr1-delta15epsilon3 - -• Lua: input.lcid_to_pcid - -• Fix off-by-one bug with slot hashes - -• Fix crashes on certain memory watch expressions - -• Lua: memory.read_expr - -• Lua: Fix memory.read_expr on nil argument - -• Fix the code to compile on G++ 4.7 - -• Change button_id to be a function pointer field, not a virtual - method - -• Add bsnes patches to fix libsnes to compile on GCC 4.7 - -• Gambatte: Always use legacy lag counting - -• Memory commands: Memory addresses are up to 16 hex digits, not - up to 8 - -• Fix analog controllers - -• Fix autohold menus - -• Fix button symbols in input display - -• Compensate for nuts bsnes superscope/justifier handling - -• Lua: Fix bit.extract boolean handling - -17.76 rr2-beta0 - -• Split emulation cores more from the rest - -• Support having multiple emulation cores compiled at once - -• Support arbitrary number of ports (well, up to 31 anyway). - -• SNES debugger support - -• Support 16-button controllers - -• Remove old SDL front end - -• Data-driven controller buttons - -• Generate the port code from defines - -17.77 rr2-beta1 - -• Update libgambatte to SVN364 - -• Get rid of partial linking (building with MXE works) - -• Load XML even without gamepack files - -• Support screen rotate & flip - -• Fix bug when changing controller key to another subkey of the - same key - -17.78 rr1-delta16 - -• Stop at movie end: Don't off-by-one - -• Fix crash closing lsnes with voice playback active. - -• Import/Export OggOpus for commentary tracks - -• 16-button controllers. - -• Don't show nonexistent controllers in input display - -• Set voice record/playback volume from UI - -• Patches for gambatte SVN364. - -• Load markup (if exists) even without gamepack file. - -• Screen rotation & flipping - -• Lua: Some new bit functions - -• Auto-refresh voice streams on change. - -• Auto-refresh subtitles on change & new subtitle editor. - -• Fix music volume adjustment. - -17.79 rr2-beta2 - -• Use system threads instead of platform threads - -• Cleanup build by allowing dummy and real drivers to link - together. - -• Split duplex support - -17.80 rr1-delta16epsilon1 - -• Wxwidgets: Fix memory watch rendering. - -• Wxwidgets: Allow setting voice stream gain. - -• Wxwidgets: VU meters and volume adjustment. - -• Lua: Custom fonts support. - -• Lua: Fix methods stopping working when resetting Lua. - -• Fix loading standard-format movies in preserve (readonly) mode. - -17.81 rr1-delta17 - -• Primitive movie editor - -• Fix VU meter with no sound device. - -• Fix various undefined return values. - -• Show rates in VU meter window. - -17.82 rr2-beta3 - -• Lua: Render queues as objects - -• Bsnes: support hard resets - -• Dedicated sound devices dialog - -• Change the default AVI sound mode to 2 or 5. - -• Fix totally borked movie saving. - -• Portaudio: Use split duplex with different devices. - -• Fix controls with gambatte core. - -• Modify save slot set handling. - -• lsnes-dumpavi: --firmware-path. - -• Fix lots of compiler warnings. - -17.83 rr1-delta17epsilon1 - -• Commentary tool: Set nominal bit rate and limit max bit rate. - -• Lua: Unconditionally reload host memory on loadstate - -• Lua: Query bindings, manipulate aliases, create inverse - bindings - -• Lua: Fix crashes with resetting VM while some types of paint - requests are in flight. - -• Lua: gui.text: Clip the text properly instead of corrupting - memory in some cases. - -• Save screenshot header reliably - -• Lua: Backport input.get2 and input.set2 - -• Lua: New controller info functions. - -• Movie editor: Fix reset delay counters to be the right way - around. - -• Lua: on_snoop2 - -• Lua: on_button and input.veto_button. - -17.84 rr2-beta4 - -• Revert memory leak fix breaking input - -• Refactor Opus handling - -• Restrict member picking only to .zip files - -• Fix reading of host-endian VMAs. - -• Fix rlow and rhigh to be the right way around. - -• Lua: Don't wedge VM if callback fails with an exception - -• Refactor Ogg handling. - -17.85 rr1-delta17epsilon2 - -• Fix saving PNG screenshots on Win32. - -• Movie editor: Sweep axis. - -• Load selected slot in ro/rw/preserve/movie mode. - -• input.joyset: Preserve and invert user input. - -• Allow immediate saving at point of save (transfer saves). - -• Wxwidgets: Filter filenames in dialogs, autoappend extensions. - -• data/verysmall.font: Add missing glyph 70 (“F”). - -• Lua: Allow painting custom fonts with halo. - -• Fix memory value search to work on byte types. - -17.86 rr2-beta5 - -• Reject oggopus files with incomplete pregap - -• Fix multistream and ogg demuxing - -• Workaround bug with screen >1024 pixels wide. - -• Allow on_input to force/veto system controls. - -• Dedicated autohold/autofire window. - -• Support per-button autofire. - -• Fix crash on trying to frameadvance/exit with no ROM loaded. - -• Fix nonexistent controller key warnings. - -• Movie editor: Fix mouse editing (TYPE_RAXIS) - -• TAS input plugin - -• Analog passthrough. - -• Add throttle axes (TYPE_TAXIS). - -• Fix movie reading with first port having multiple controllers. - -• Move some info from status panel to statusbar. - -17.87 rr1-delta17epsilon3 - -• Fix status panel (and movie editor) flicker - -• Show effects of Lua in input display - -• Offer lsmv.backup as file filter too for load lsmv - -• Allow slowing down subframe advance - -• Display current save slot information - -• Add snes9x fonts - -• Fix hotkeys stopping working after X-ing settings dialog - -• Movie editor: Fix bug if extending finished movie - -• Cap current_frame_first_subframe to movie size when recounting - movie - -• Movie editor: Interpret ctrl+click as right click - -17.88 rr2-beta6 - -• Autofire: Fix false status indications - -• Fix subframe counter - -• Fix print() after Lua reset - -• New settings framework - -• Remove some unused leftover stuff - -• Fix race condition causing possible crash on startup - -• Fix compiling if uint64_t and size_t are not compatible - -• Lua: Don't crash if input.[gs]et{,a} is called outside on_input - -17.89 rr2-beta7 - -• Fix bug causing crash if triple has invalid button - diff --git a/src/core/memorymanip.cpp b/src/core/memorymanip.cpp index 3f50a5fe..c806e15b 100644 --- a/src/core/memorymanip.cpp +++ b/src/core/memorymanip.cpp @@ -1,4 +1,3 @@ - #include "core/command.hpp" #include "core/memorymanip.hpp" #include "core/moviedata.hpp" @@ -7,6 +6,7 @@ #include "core/rrdata.hpp" #include "interface/romtype.hpp" #include "library/string.hpp" +#include "library/int24.hpp" #include "library/minmax.hpp" #include "library/memorysearch.hpp" @@ -255,14 +255,17 @@ namespace read_command> ru1("read-byte"); read_command> ru2("read-word"); + read_command> ru3("read-hword"); read_command> ru4("read-dword"); read_command> ru8("read-qword"); read_command> rs1("read-sbyte"); read_command> rs2("read-sword"); + read_command> rs3("read-shword"); read_command> rs4("read-sdword"); read_command> rs8("read-sqword"); write_command> w1("write-byte"); write_command> w2("write-word"); + write_command> w3("write-hword"); write_command> w4("write-dword"); write_command> w8("write-qword"); diff --git a/src/core/memorywatch.cpp b/src/core/memorywatch.cpp index 74f8efec..e25625c5 100644 --- a/src/core/memorywatch.cpp +++ b/src/core/memorywatch.cpp @@ -4,7 +4,8 @@ #include "core/memorywatch.hpp" #include "core/project.hpp" #include "core/window.hpp" -#include +#include "library/string.hpp" +#include "library/int24.hpp" #include #include @@ -341,6 +342,12 @@ std::string evaluate_watch(const std::string& expr) throw(std::bad_alloc) case 'W': stack_push(s, lsnes_memory.read(stack_pop(s).as_address())); break; + case 'o': + stack_push(s, lsnes_memory.read(stack_pop(s).as_address())); + break; + case 'O': + stack_push(s, lsnes_memory.read(stack_pop(s).as_address())); + break; case 'd': stack_push(s, lsnes_memory.read(stack_pop(s).as_address())); break; diff --git a/src/library/memorysearch.cpp b/src/library/memorysearch.cpp index 85a03947..7e0f939c 100644 --- a/src/library/memorysearch.cpp +++ b/src/library/memorysearch.cpp @@ -1,6 +1,7 @@ #include "memorysearch.hpp" #include "minmax.hpp" #include "serialization.hpp" +#include "int24.hpp" #include memory_search::memory_search(memory_space& space) throw(std::bad_alloc) @@ -84,7 +85,7 @@ struct search_seqlt { T mask = (T)1 << (sizeof(T) * 8 - 1); T diff = newv - oldv; - return ((diff & mask) != 0); + return ((diff & mask) != (T)0); } }; @@ -96,7 +97,7 @@ struct search_seqle { T mask = (T)1 << (sizeof(T) * 8 - 1); T diff = newv - oldv; - return ((diff & mask) != 0) || (diff == 0); + return ((diff & mask) != (T)0) || (diff == (T)0); } }; @@ -108,7 +109,7 @@ struct search_seqge { T mask = (T)1 << (sizeof(T) * 8 - 1); T diff = newv - oldv; - return ((diff & mask) == 0); + return ((diff & mask) == (T)0); } }; @@ -120,7 +121,7 @@ struct search_seqgt { T mask = (T)1 << (sizeof(T) * 8 - 1); T diff = newv - oldv; - return ((diff & mask) == 0) && (diff != 0); + return ((diff & mask) == (T)0) && (diff != (T)0); } }; @@ -381,6 +382,8 @@ void memorysearch_pull_all(memory_search& s) memorysearch_pull_type(s); memorysearch_pull_type(s); memorysearch_pull_type(s); + memorysearch_pull_type(s); + memorysearch_pull_type(s); memorysearch_pull_type(s); memorysearch_pull_type(s); memorysearch_pull_type(s); diff --git a/src/library/memoryspace.cpp b/src/library/memoryspace.cpp index 887a2be9..0f1d65bb 100644 --- a/src/library/memoryspace.cpp +++ b/src/library/memoryspace.cpp @@ -1,6 +1,7 @@ #include "memoryspace.hpp" #include "minmax.hpp" #include "serialization.hpp" +#include "int24.hpp" #include namespace @@ -150,6 +151,8 @@ template<> int8_t MSR (uint64_t address) { return internal_read(* template<> uint8_t MSR (uint64_t address) { return internal_read(*this, address); } template<> int16_t MSR (uint64_t address) { return internal_read(*this, address); } template<> uint16_t MSR (uint64_t address) { return internal_read(*this, address); } +template<> ss_int24_t MSR (uint64_t address) { return internal_read(*this, address); } +template<> ss_uint24_t MSR (uint64_t address) { return internal_read(*this, address); } template<> int32_t MSR (uint64_t address) { return internal_read(*this, address); } template<> uint32_t MSR (uint64_t address) { return internal_read(*this, address); } template<> int64_t MSR (uint64_t address) { return internal_read(*this, address); } @@ -158,6 +161,8 @@ template<> bool MSW (uint64_t a, int8_t v) { return internal_write bool MSW (uint64_t a, uint8_t v) { return internal_write(*this, a, v); } template<> bool MSW (uint64_t a, int16_t v) { return internal_write(*this, a, v); } template<> bool MSW (uint64_t a, uint16_t v) { return internal_write(*this, a, v); } +template<> bool MSW (uint64_t a, ss_int24_t v) { return internal_write(*this, a, v); } +template<> bool MSW (uint64_t a, ss_uint24_t v) { return internal_write(*this, a, v); } template<> bool MSW (uint64_t a, int32_t v) { return internal_write(*this, a, v); } template<> bool MSW (uint64_t a, uint32_t v) { return internal_write(*this, a, v); } template<> bool MSW (uint64_t a, int64_t v) { return internal_write(*this, a, v); } @@ -166,6 +171,8 @@ template<> int8_t MSRL (uint64_t address) { return internal_read(* template<> uint8_t MSRL (uint64_t address) { return internal_read(*this, address); } template<> int16_t MSRL (uint64_t address) { return internal_read(*this, address); } template<> uint16_t MSRL (uint64_t address) { return internal_read(*this, address); } +template<> ss_int24_t MSRL (uint64_t address) { return internal_read(*this, address); } +template<> ss_uint24_t MSRL (uint64_t address) { return internal_read(*this, address); } template<> int32_t MSRL (uint64_t address) { return internal_read(*this, address); } template<> uint32_t MSRL (uint64_t address) { return internal_read(*this, address); } template<> int64_t MSRL (uint64_t address) { return internal_read(*this, address); } @@ -174,6 +181,8 @@ template<> bool MSWL (uint64_t a, int8_t v) { return internal_write bool MSWL (uint64_t a, uint8_t v) { return internal_write(*this, a, v); } template<> bool MSWL (uint64_t a, int16_t v) { return internal_write(*this, a, v); } template<> bool MSWL (uint64_t a, uint16_t v) { return internal_write(*this, a, v); } +template<> bool MSWL (uint64_t a, ss_int24_t v) { return internal_write(*this, a, v); } +template<> bool MSWL (uint64_t a, ss_uint24_t v) { return internal_write(*this, a, v); } template<> bool MSWL (uint64_t a, int32_t v) { return internal_write(*this, a, v); } template<> bool MSWL (uint64_t a, uint32_t v) { return internal_write(*this, a, v); } template<> bool MSWL (uint64_t a, int64_t v) { return internal_write(*this, a, v); } diff --git a/src/lua/hostmemory.cpp b/src/lua/hostmemory.cpp index 624a33fd..81997b7d 100644 --- a/src/lua/hostmemory.cpp +++ b/src/lua/hostmemory.cpp @@ -1,6 +1,7 @@ #include "lua/internal.hpp" #include "core/moviedata.hpp" #include "library/serialization.hpp" +#include "library/int24.hpp" namespace { @@ -79,6 +80,26 @@ namespace return do_write(L, fname); }); + function_ptr_luafun hm_readh(lua_func_misc, "hostmemory.readhword", [](lua_state& L, + const std::string& fname) -> int { + return do_read(L, fname); + }); + + function_ptr_luafun hm_writeh(lua_func_misc, "hostmemory.writehword", [](lua_state& L, + const std::string& fname) -> int { + return do_write(L, fname); + }); + + function_ptr_luafun hm_readsh(lua_func_misc, "hostmemory.readshword", [](lua_state& L, + const std::string& fname) -> int { + return do_read(L, fname); + }); + + function_ptr_luafun hm_writesh(lua_func_misc, "hostmemory.writeshword", [](lua_state& L, + const std::string& fname) -> int { + return do_write(L, fname); + }); + function_ptr_luafun hm_readd(lua_func_misc, "hostmemory.readdword", [](lua_state& L, const std::string& fname) -> int { return do_read(L, fname); diff --git a/src/lua/memory.cpp b/src/lua/memory.cpp index c1efb36a..54be7e1d 100644 --- a/src/lua/memory.cpp +++ b/src/lua/memory.cpp @@ -7,6 +7,7 @@ #include "library/sha256.hpp" #include "library/string.hpp" #include "library/minmax.hpp" +#include "library/int24.hpp" namespace { @@ -396,18 +397,23 @@ namespace lua_read_memory> rsb("memory.readsbyte"); lua_read_memory> ruw("memory.readword"); lua_read_memory> rsw("memory.readsword"); + lua_read_memory> ruh("memory.readhword"); + lua_read_memory> rsh("memory.readshword"); lua_read_memory> rud("memory.readdword"); lua_read_memory> rsd("memory.readsdword"); lua_read_memory> ruq("memory.readqword"); lua_read_memory> rsq("memory.readsqword"); lua_write_memory> wb("memory.writebyte"); lua_write_memory> ww("memory.writeword"); + lua_write_memory> wh("memory.writehword"); lua_write_memory> wd("memory.writedword"); lua_write_memory> wq("memory.writeqword"); lua_mmap_memory_helper, &memory_space::write> mhub; lua_mmap_memory_helper, &memory_space::write> mhsb; lua_mmap_memory_helper, &memory_space::write> mhuw; lua_mmap_memory_helper, &memory_space::write> mhsw; + lua_mmap_memory_helper, &memory_space::write> mhuh; + lua_mmap_memory_helper, &memory_space::write> mhsh; lua_mmap_memory_helper, &memory_space::write> mhud; lua_mmap_memory_helper, &memory_space::write> mhsd; lua_mmap_memory_helper, &memory_space::write> mhuq; @@ -416,11 +422,12 @@ namespace lua_mmap_memory msb("memory.mapsbyte", mhsb); lua_mmap_memory muw("memory.mapword", mhuw); lua_mmap_memory msw("memory.mapsword", mhsw); + lua_mmap_memory muh("memory.maphword", mhuh); + lua_mmap_memory msh("memory.mapshword", mhsh); lua_mmap_memory mud("memory.mapdword", mhud); lua_mmap_memory msd("memory.mapsdword", mhsd); lua_mmap_memory muq("memory.mapqword", mhuq); lua_mmap_memory msq("memory.mapsqword", mhsq); - } int lua_mmap_struct::map(lua_state& L, const std::string& fname) @@ -448,6 +455,10 @@ int lua_mmap_struct::map(lua_state& L, const std::string& fname) mappings[name2] = std::make_pair(&mhuw, addr); else if(type2 == "sword") mappings[name2] = std::make_pair(&mhsw, addr); + else if(type2 == "hword") + mappings[name2] = std::make_pair(&mhuh, addr); + else if(type2 == "shword") + mappings[name2] = std::make_pair(&mhsh, addr); else if(type2 == "dword") mappings[name2] = std::make_pair(&mhud, addr); else if(type2 == "sdword") diff --git a/src/lua/memory2.cpp b/src/lua/memory2.cpp index a3a6691b..60ea7783 100644 --- a/src/lua/memory2.cpp +++ b/src/lua/memory2.cpp @@ -8,6 +8,7 @@ #include "library/string.hpp" #include "library/serialization.hpp" #include "library/minmax.hpp" +#include "library/int24.hpp" namespace { @@ -81,6 +82,8 @@ namespace {"byte", &lua_vma::rw}, {"sword", &lua_vma::rw}, {"word", &lua_vma::rw}, + {"shword", &lua_vma::rw}, + {"hword", &lua_vma::rw}, {"sdword", &lua_vma::rw}, {"dword", &lua_vma::rw}, {"sqword", &lua_vma::rw}, @@ -89,6 +92,8 @@ namespace {"ibyte", &lua_vma::rw}, {"isword", &lua_vma::rw}, {"iword", &lua_vma::rw}, + {"ishword", &lua_vma::rw}, + {"ihword", &lua_vma::rw}, {"isdword", &lua_vma::rw}, {"idword", &lua_vma::rw}, {"isqword", &lua_vma::rw}, diff --git a/src/platform/wxwidgets/memorysearch.cpp b/src/platform/wxwidgets/memorysearch.cpp index 23fea344..2add4d14 100644 --- a/src/platform/wxwidgets/memorysearch.cpp +++ b/src/platform/wxwidgets/memorysearch.cpp @@ -3,6 +3,7 @@ #include "core/memorywatch.hpp" #include "library/string.hpp" #include "library/memorysearch.hpp" +#include "library/int24.hpp" #include "platform/wxwidgets/platform.hpp" #include "platform/wxwidgets/scrollbar.hpp" @@ -26,7 +27,7 @@ #define wxID_DISQUALIFY (wxID_HIGHEST + 8) #define wxID_BUTTONS_BASE (wxID_HIGHEST + 128) -#define DATATYPES 8 +#define DATATYPES 10 #define CANDIDATE_LIMIT 512 class wxwindow_memorysearch; @@ -42,6 +43,8 @@ namespace "unsigned byte", "signed word", "unsigned word", + "signed hword", + "unsigned hword", "signed dword", "unsigned dword", "signed qword", @@ -103,6 +106,11 @@ namespace return format_number_signedh(static_cast(val), 4, hex); } + template<> std::string format_number_signed(ss_uint24_t val, bool hex) + { + return format_number_signedh((int32_t)(uint32_t)(val), 6, hex); + } + template<> std::string format_number_signed(uint32_t val, bool hex) { return format_number_signedh(static_cast(val), 8, hex); @@ -123,6 +131,11 @@ namespace return format_number_unsignedh(val, 4, hex); } + template<> std::string format_number_unsigned(ss_uint24_t val, bool hex) + { + return format_number_unsignedh(val, 6, hex); + } + template<> std::string format_number_unsigned(uint32_t val, bool hex) { return format_number_unsignedh(val, 8, hex); @@ -270,6 +283,10 @@ namespace &memory_search::s_value>, &wxwindow_memorysearch::search_1>, + &wxwindow_memorysearch::search_1>, + &wxwindow_memorysearch::search_1>, &wxwindow_memorysearch::search_1>, &wxwindow_memorysearch::search_1>, &wxwindow_memorysearch::search_1>, + &wxwindow_memorysearch::search_1>, + &wxwindow_memorysearch::search_1>, &wxwindow_memorysearch::search_1>, &wxwindow_memorysearch::search_1>, &wxwindow_memorysearch::search_0<&memory_search::s_lt>, &wxwindow_memorysearch::search_0<&memory_search::s_lt>, + &wxwindow_memorysearch::search_0<&memory_search::s_lt>, + &wxwindow_memorysearch::search_0<&memory_search::s_lt>, &wxwindow_memorysearch::search_0<&memory_search::s_lt>, &wxwindow_memorysearch::search_0<&memory_search::s_lt>, &wxwindow_memorysearch::search_0<&memory_search::s_lt>, @@ -315,6 +338,8 @@ namespace &wxwindow_memorysearch::search_0<&memory_search::s_le>, &wxwindow_memorysearch::search_0<&memory_search::s_le>, &wxwindow_memorysearch::search_0<&memory_search::s_le>, + &wxwindow_memorysearch::search_0<&memory_search::s_le>, + &wxwindow_memorysearch::search_0<&memory_search::s_le>, &wxwindow_memorysearch::search_0<&memory_search::s_le>, &wxwindow_memorysearch::search_0<&memory_search::s_le>, &wxwindow_memorysearch::search_0<&memory_search::s_le>, @@ -326,6 +351,8 @@ namespace &wxwindow_memorysearch::search_0<&memory_search::s_eq>, &wxwindow_memorysearch::search_0<&memory_search::s_eq>, &wxwindow_memorysearch::search_0<&memory_search::s_eq>, + &wxwindow_memorysearch::search_0<&memory_search::s_eq>, + &wxwindow_memorysearch::search_0<&memory_search::s_eq>, &wxwindow_memorysearch::search_0<&memory_search::s_eq>, &wxwindow_memorysearch::search_0<&memory_search::s_eq>, &wxwindow_memorysearch::search_0<&memory_search::s_eq>, @@ -337,6 +364,8 @@ namespace &wxwindow_memorysearch::search_0<&memory_search::s_ne>, &wxwindow_memorysearch::search_0<&memory_search::s_ne>, &wxwindow_memorysearch::search_0<&memory_search::s_ne>, + &wxwindow_memorysearch::search_0<&memory_search::s_ne>, + &wxwindow_memorysearch::search_0<&memory_search::s_ne>, &wxwindow_memorysearch::search_0<&memory_search::s_ne>, &wxwindow_memorysearch::search_0<&memory_search::s_ne>, &wxwindow_memorysearch::search_0<&memory_search::s_ne>, @@ -348,6 +377,8 @@ namespace &wxwindow_memorysearch::search_0<&memory_search::s_ge>, &wxwindow_memorysearch::search_0<&memory_search::s_ge>, &wxwindow_memorysearch::search_0<&memory_search::s_ge>, + &wxwindow_memorysearch::search_0<&memory_search::s_ge>, + &wxwindow_memorysearch::search_0<&memory_search::s_ge>, &wxwindow_memorysearch::search_0<&memory_search::s_ge>, &wxwindow_memorysearch::search_0<&memory_search::s_ge>, &wxwindow_memorysearch::search_0<&memory_search::s_ge>, @@ -359,6 +390,8 @@ namespace &wxwindow_memorysearch::search_0<&memory_search::s_gt>, &wxwindow_memorysearch::search_0<&memory_search::s_gt>, &wxwindow_memorysearch::search_0<&memory_search::s_gt>, + &wxwindow_memorysearch::search_0<&memory_search::s_gt>, + &wxwindow_memorysearch::search_0<&memory_search::s_gt>, &wxwindow_memorysearch::search_0<&memory_search::s_gt>, &wxwindow_memorysearch::search_0<&memory_search::s_gt>, &wxwindow_memorysearch::search_0<&memory_search::s_gt>, @@ -370,6 +403,8 @@ namespace &wxwindow_memorysearch::search_0<&memory_search::s_seqlt>, &wxwindow_memorysearch::search_0<&memory_search::s_seqlt>, &wxwindow_memorysearch::search_0<&memory_search::s_seqlt>, + &wxwindow_memorysearch::search_0<&memory_search::s_seqlt>, + &wxwindow_memorysearch::search_0<&memory_search::s_seqlt>, &wxwindow_memorysearch::search_0<&memory_search::s_seqlt>, &wxwindow_memorysearch::search_0<&memory_search::s_seqlt>, &wxwindow_memorysearch::search_0<&memory_search::s_seqlt>, @@ -381,6 +416,8 @@ namespace &wxwindow_memorysearch::search_0<&memory_search::s_seqle>, &wxwindow_memorysearch::search_0<&memory_search::s_seqle>, &wxwindow_memorysearch::search_0<&memory_search::s_seqle>, + &wxwindow_memorysearch::search_0<&memory_search::s_seqle>, + &wxwindow_memorysearch::search_0<&memory_search::s_seqle>, &wxwindow_memorysearch::search_0<&memory_search::s_seqle>, &wxwindow_memorysearch::search_0<&memory_search::s_seqle>, &wxwindow_memorysearch::search_0<&memory_search::s_seqle>, @@ -392,6 +429,8 @@ namespace &wxwindow_memorysearch::search_0<&memory_search::s_seqge>, &wxwindow_memorysearch::search_0<&memory_search::s_seqge>, &wxwindow_memorysearch::search_0<&memory_search::s_seqge>, + &wxwindow_memorysearch::search_0<&memory_search::s_seqge>, + &wxwindow_memorysearch::search_0<&memory_search::s_seqge>, &wxwindow_memorysearch::search_0<&memory_search::s_seqge>, &wxwindow_memorysearch::search_0<&memory_search::s_seqge>, &wxwindow_memorysearch::search_0<&memory_search::s_seqge>, @@ -403,6 +442,8 @@ namespace &wxwindow_memorysearch::search_0<&memory_search::s_seqgt>, &wxwindow_memorysearch::search_0<&memory_search::s_seqgt>, &wxwindow_memorysearch::search_0<&memory_search::s_seqgt>, + &wxwindow_memorysearch::search_0<&memory_search::s_seqgt>, + &wxwindow_memorysearch::search_0<&memory_search::s_seqgt>, &wxwindow_memorysearch::search_0<&memory_search::s_seqgt>, &wxwindow_memorysearch::search_0<&memory_search::s_seqgt>, &wxwindow_memorysearch::search_0<&memory_search::s_seqgt>, @@ -417,6 +458,8 @@ namespace &wxwindow_memorysearch::search_0<&memory_search::update>, &wxwindow_memorysearch::search_0<&memory_search::update>, &wxwindow_memorysearch::search_0<&memory_search::update>, + &wxwindow_memorysearch::search_0<&memory_search::update>, + &wxwindow_memorysearch::search_0<&memory_search::update>, &wxwindow_memorysearch::search_0<&memory_search::update> } } @@ -549,17 +592,24 @@ void wxwindow_memorysearch::panel::prepare_paint() _parent->hexmode); break; case 4: - row += format_number_signed(lsnes_memory.read(i), _parent->hexmode); + row += format_number_signed(lsnes_memory.read(i), _parent->hexmode); break; case 5: - row += format_number_unsigned(lsnes_memory.read(i), + row += format_number_unsigned(lsnes_memory.read(i), _parent->hexmode); break; case 6: + row += format_number_signed(lsnes_memory.read(i), _parent->hexmode); + break; + case 7: + row += format_number_unsigned(lsnes_memory.read(i), + _parent->hexmode); + break; + case 8: row += format_number_signed(lsnes_memory.read(i), _parent->hexmode); break; - case 7: + case 9: row += format_number_unsigned(lsnes_memory.read(i), _parent->hexmode); break;