Merge branch 'rr1-maint'
Conflicts: src/core/controller.cpp src/core/controllerframe.cpp
This commit is contained in:
commit
fb203e1fc4
16 changed files with 290 additions and 529 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -9,5 +9,6 @@ rom
|
||||||
lsnes
|
lsnes
|
||||||
*.util
|
*.util
|
||||||
/core
|
/core
|
||||||
|
/bsnes
|
||||||
src/fonts/font.cpp
|
src/fonts/font.cpp
|
||||||
src/core/version.cpp
|
src/core/version.cpp
|
||||||
|
|
66
Makefile
66
Makefile
|
@ -1,62 +1,65 @@
|
||||||
CROSS_PREFIX=
|
OPTIONS=options.build
|
||||||
DOT_EXECUTABLE_SUFFIX=
|
include $(OPTIONS)
|
||||||
OBJECT_SUFFIX = o
|
|
||||||
ARCHIVE_SUFFIX = a
|
|
||||||
FONT_SRC := unifontfull-5.1.20080820.hex
|
|
||||||
|
|
||||||
USER_CFLAGS=
|
|
||||||
USER_LDFLAGS=
|
|
||||||
|
|
||||||
#Compilers.
|
#Compilers.
|
||||||
CC := g++
|
|
||||||
LD := ld
|
|
||||||
REALCC = $(CROSS_PREFIX)$(CC)
|
REALCC = $(CROSS_PREFIX)$(CC)
|
||||||
REALLD = $(CROSS_PREFIX)$(LD)
|
REALLD = $(CROSS_PREFIX)$(LD)
|
||||||
HOSTCC = $(CC)
|
REALRANLIB = $(CROSS_PREFIX)$(RANLIB)
|
||||||
|
|
||||||
|
BSNES_PATH=$(shell pwd)/bsnes
|
||||||
|
|
||||||
#Flags.
|
#Flags.
|
||||||
HOSTCCFLAGS = -std=gnu++0x
|
HOSTCCFLAGS = -std=gnu++0x
|
||||||
CFLAGS = -I$(BSNES_PATH) -std=gnu++0x $(USER_CFLAGS)
|
CFLAGS = -I$(BSNES_PATH) -std=gnu++0x $(USER_CFLAGS)
|
||||||
LDFLAGS = -lboost_iostreams-mt -lboost_filesystem-mt -lboost_system-mt -lboost_regex-mt -lz $(USER_LDFLAGS)
|
ifdef BOOST_NEEDS_MT
|
||||||
|
BOOST_LIB_POSTFIX=-mt
|
||||||
#Platform
|
else
|
||||||
GRAPHICS=SDL
|
BOOST_LIB_POSTFIX=
|
||||||
SOUND=SDL
|
|
||||||
JOYSTICK=SDL
|
|
||||||
THREADS=BOOST
|
|
||||||
|
|
||||||
#bsnes
|
|
||||||
ifdef BSNES_VERSION
|
|
||||||
CFLAGS += -DBSNES_V$(BSNES_VERSION)
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
#Threads
|
LDFLAGS = -lboost_iostreams$(BOOST_LIB_POSTFIX) -lboost_filesystem$(BOOST_LIB_POSTFIX) -lboost_system$(BOOST_LIB_POSTFIX) -lboost_regex$(BOOST_LIB_POSTFIX) -lz $(USER_LDFLAGS)
|
||||||
ifdef THREADS
|
|
||||||
ifeq ($(THREADS), NATIVE)
|
ifeq ($(THREADS), NATIVE)
|
||||||
CFLAGS += -DNATIVE_THREADS
|
CFLAGS += -DNATIVE_THREADS
|
||||||
else
|
else
|
||||||
ifeq ($(THREADS), BOOST)
|
ifeq ($(THREADS), BOOST)
|
||||||
CFLAGS += -DBOOST_THREADS
|
CFLAGS += -DBOOST_THREADS
|
||||||
ifdef BOOST_THREAD_LIB
|
LDFLAGS += -lboost_thread$(BOOST_LIB_POSTFIX)
|
||||||
LDFLAGS += -l$(BOOST_THREAD_LIB)
|
|
||||||
else
|
|
||||||
LDFLAGS += -lboost_thread-mt
|
|
||||||
endif
|
|
||||||
else
|
else
|
||||||
$(error "Bad value for THREADS (expected NATIVE or BOOST)")
|
$(error "Bad value for THREADS (expected NATIVE or BOOST)")
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
endif
|
|
||||||
|
|
||||||
ifdef BSNES_IS_COMPAT
|
ifdef BSNES_IS_COMPAT
|
||||||
CFLAGS += -DBSNES_IS_COMPAT
|
CFLAGS += -DBSNES_IS_COMPAT
|
||||||
endif
|
endif
|
||||||
|
|
||||||
export DOT_EXECUTABLE_SUFFIX OBJECT_SUFFIX ARCHIVE_SUFFIX FONT_SRC REALCC HOSTCC REALLD HOSTCCFLAGS CFLAGS LDFLAGS GRAPHICS SOUND JOYSTICK THREADS
|
export
|
||||||
|
|
||||||
all: src/__all_files__
|
all: src/__all_files__
|
||||||
|
|
||||||
src/__all_files__: src/core/version.cpp forcelook
|
ifeq ($(BSNES_VERSION), 087)
|
||||||
|
BSNES_TARGET_STRING=target=libsnes
|
||||||
|
else
|
||||||
|
BSNES_TARGET_STRING=ui=ui-libsnes
|
||||||
|
endif
|
||||||
|
|
||||||
|
CFLAGS += -DBSNES_V${BSNES_VERSION}
|
||||||
|
|
||||||
|
ifdef BSNES_IS_COMPAT
|
||||||
|
BSNES_PROFILE_STRING=profile=compatibility
|
||||||
|
else
|
||||||
|
BSNES_PROFILE_STRING=profile=accuracy
|
||||||
|
endif
|
||||||
|
|
||||||
|
bsnes_compiler=$(subst ++,cc,$(REALCC))
|
||||||
|
|
||||||
|
bsnes/out/libsnes.$(ARCHIVE_SUFFIX): bsnes/snes/snes.hpp forcelook
|
||||||
|
$(MAKE) -C bsnes options=debugger $(BSNES_PROFILE_STRING) $(BSNES_TARGET_STRING) compiler=$(bsnes_compiler)
|
||||||
|
$(REALRANLIB) $@
|
||||||
|
|
||||||
|
src/__all_files__: src/core/version.cpp forcelook bsnes/out/libsnes.$(ARCHIVE_SUFFIX)
|
||||||
$(MAKE) -C src precheck
|
$(MAKE) -C src precheck
|
||||||
$(MAKE) -C src
|
$(MAKE) -C src
|
||||||
cp src/lsnes$(DOT_EXECUTABLE_SUFFIX) .
|
cp src/lsnes$(DOT_EXECUTABLE_SUFFIX) .
|
||||||
|
@ -68,6 +71,7 @@ src/core/version.cpp: buildaux/version.exe forcelook
|
||||||
|
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
|
$(MAKE) -C bsnes clean
|
||||||
$(MAKE) -C src clean
|
$(MAKE) -C src clean
|
||||||
|
|
||||||
forcelook:
|
forcelook:
|
||||||
|
|
|
@ -1127,6 +1127,28 @@ public:
|
||||||
* Returns: The state of autohold.
|
* Returns: The state of autohold.
|
||||||
*/
|
*/
|
||||||
bool autohold(unsigned port, unsigned pcid, unsigned pbid) throw();
|
bool autohold(unsigned port, unsigned pcid, unsigned pbid) throw();
|
||||||
|
/**
|
||||||
|
* Reset all frame holds.
|
||||||
|
*/
|
||||||
|
void reset_framehold() throw();
|
||||||
|
/**
|
||||||
|
* Manipulate hold for frame.
|
||||||
|
*
|
||||||
|
* Parameter port: The port.
|
||||||
|
* Parameter pcid: The physical controller ID to manipulate.
|
||||||
|
* Parameter pbid: The physical button ID to manipulate.
|
||||||
|
* Parameter newstate: The new state for framehold.
|
||||||
|
*/
|
||||||
|
void framehold(unsigned port, unsigned pcid, unsigned pbid, bool newstate) throw();
|
||||||
|
/**
|
||||||
|
* Query hold for frame.
|
||||||
|
*
|
||||||
|
* Parameter port: The port.
|
||||||
|
* Parameter pcid: The physical controller ID to query.
|
||||||
|
* Parameter pbid: The physical button ID to query.
|
||||||
|
* Returns: The state of framehold.
|
||||||
|
*/
|
||||||
|
bool framehold(unsigned port, unsigned pcid, unsigned pbid) throw();
|
||||||
/**
|
/**
|
||||||
* Manipulate button.
|
* Manipulate button.
|
||||||
*
|
*
|
||||||
|
@ -1174,6 +1196,7 @@ private:
|
||||||
porttype_t porttypes[MAX_PORTS];
|
porttype_t porttypes[MAX_PORTS];
|
||||||
controller_frame _input;
|
controller_frame _input;
|
||||||
controller_frame _autohold;
|
controller_frame _autohold;
|
||||||
|
controller_frame _framehold;
|
||||||
controller_frame _committed;
|
controller_frame _committed;
|
||||||
std::vector<controller_frame> _autofire;
|
std::vector<controller_frame> _autofire;
|
||||||
};
|
};
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
|
#include <map>
|
||||||
#include "video/avi/structure.hpp"
|
#include "video/avi/structure.hpp"
|
||||||
#include "video/avi/samplequeue.hpp"
|
#include "video/avi/samplequeue.hpp"
|
||||||
#include "video/avi/timer.hpp"
|
#include "video/avi/timer.hpp"
|
||||||
|
|
346
manual.lyx
346
manual.lyx
|
@ -77,15 +77,15 @@ bsnes libsnes
|
||||||
|
|
||||||
\begin_deeper
|
\begin_deeper
|
||||||
\begin_layout Enumerate
|
\begin_layout Enumerate
|
||||||
v084 or 085
|
v084-v087 (v084 or v085 for delayreset support)
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
\begin_layout Enumerate
|
\begin_layout Enumerate
|
||||||
accuracy or compatiblity core.
|
accuracy or compatiblity core with debugger enabled.
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
\begin_layout Enumerate
|
\begin_layout Enumerate
|
||||||
Patched version (using included 6 patches)
|
Patched version (using included 7 patches)
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
\end_deeper
|
\end_deeper
|
||||||
|
@ -102,7 +102,7 @@ boost_filesystem
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
\begin_layout Enumerate
|
\begin_layout Enumerate
|
||||||
boost_thread
|
boost_thread (if native std::thread is not available)
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
\begin_layout Enumerate
|
\begin_layout Enumerate
|
||||||
|
@ -125,347 +125,42 @@ libswscale (wxwidgets graphics only)
|
||||||
Portaudio (portaudio sound only)
|
Portaudio (portaudio sound only)
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
\begin_layout Enumerate
|
|
||||||
std::thread and co (for threaded dumper only, not needed if std::thread
|
|
||||||
is available)
|
|
||||||
\end_layout
|
|
||||||
|
|
||||||
\begin_layout Enumerate
|
\begin_layout Enumerate
|
||||||
Lua (if Lua support is needed).
|
Lua (if Lua support is needed).
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
|
\begin_deeper
|
||||||
\begin_layout Itemize
|
\begin_layout Itemize
|
||||||
Version 5.1.X or 5.2X.
|
Version 5.1.X or 5.2X.
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
|
\end_deeper
|
||||||
|
\begin_layout Enumerate
|
||||||
|
G++ 4.6 (bsnes doesn't seem to like 4.7).
|
||||||
|
\end_layout
|
||||||
|
|
||||||
\begin_layout Section
|
\begin_layout Section
|
||||||
Building
|
Building
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
\begin_layout Standard
|
|
||||||
Building is via makefile, the following options are available:
|
|
||||||
\end_layout
|
|
||||||
|
|
||||||
\begin_layout Itemize
|
|
||||||
CROSS_PREFIX=<prefix>
|
|
||||||
\end_layout
|
|
||||||
|
|
||||||
\begin_deeper
|
|
||||||
\begin_layout Itemize
|
|
||||||
Prefix to apply to commands when building executables / object files for
|
|
||||||
the target architecture.
|
|
||||||
|
|
||||||
\end_layout
|
|
||||||
|
|
||||||
\begin_layout Itemize
|
|
||||||
Default is blank.
|
|
||||||
\end_layout
|
|
||||||
|
|
||||||
\end_deeper
|
|
||||||
\begin_layout Itemize
|
|
||||||
CC=<name>
|
|
||||||
\end_layout
|
|
||||||
|
|
||||||
\begin_deeper
|
|
||||||
\begin_layout Itemize
|
|
||||||
Name of C++ compiler.
|
|
||||||
\end_layout
|
|
||||||
|
|
||||||
\begin_layout Itemize
|
|
||||||
CROSS_PREFIX is prepended if compiling for target architecture.
|
|
||||||
\end_layout
|
|
||||||
|
|
||||||
\begin_layout Itemize
|
|
||||||
This needs to be at least GCC 4.6.
|
|
||||||
\end_layout
|
|
||||||
|
|
||||||
\begin_layout Itemize
|
|
||||||
Set to 'g++-mp-4.6' if compiling on Mac OS X using GCC 4.6 from Macports.
|
|
||||||
\end_layout
|
|
||||||
|
|
||||||
\begin_layout Itemize
|
|
||||||
Default is 'g++'.
|
|
||||||
\end_layout
|
|
||||||
|
|
||||||
\end_deeper
|
|
||||||
\begin_layout Itemize
|
|
||||||
HOSTCC=<name>
|
|
||||||
\end_layout
|
|
||||||
|
|
||||||
\begin_deeper
|
|
||||||
\begin_layout Itemize
|
|
||||||
Name of host C++ compiler.
|
|
||||||
\end_layout
|
|
||||||
|
|
||||||
\begin_layout Itemize
|
|
||||||
Default is value of 'CC' option.
|
|
||||||
\end_layout
|
|
||||||
|
|
||||||
\end_deeper
|
|
||||||
\begin_layout Itemize
|
|
||||||
USER_HOSTCCFLAGS=<flags>:
|
|
||||||
\end_layout
|
|
||||||
|
|
||||||
\begin_deeper
|
|
||||||
\begin_layout Itemize
|
|
||||||
Compiler flags to pass when compiling/linking for host architecture.
|
|
||||||
\end_layout
|
|
||||||
|
|
||||||
\begin_layout Itemize
|
|
||||||
Default is blank.
|
|
||||||
\end_layout
|
|
||||||
|
|
||||||
\end_deeper
|
|
||||||
\begin_layout Itemize
|
|
||||||
USER_CFLAGS=<flags>
|
|
||||||
\end_layout
|
|
||||||
|
|
||||||
\begin_deeper
|
|
||||||
\begin_layout Itemize
|
|
||||||
Extra flags to pass when compiling for target architecture
|
|
||||||
\end_layout
|
|
||||||
|
|
||||||
\begin_layout Itemize
|
|
||||||
Default is blank.
|
|
||||||
\end_layout
|
|
||||||
|
|
||||||
\end_deeper
|
|
||||||
\begin_layout Itemize
|
|
||||||
USER_LDFLAGS=<flags>:
|
|
||||||
\end_layout
|
|
||||||
|
|
||||||
\begin_deeper
|
|
||||||
\begin_layout Itemize
|
|
||||||
Extra flags to pass when linking for target architecture.
|
|
||||||
\end_layout
|
|
||||||
|
|
||||||
\begin_layout Itemize
|
|
||||||
Default is blank.
|
|
||||||
\end_layout
|
|
||||||
|
|
||||||
\end_deeper
|
|
||||||
\begin_layout Itemize
|
|
||||||
USER_PLATFORM_CFLAGS=<flags>
|
|
||||||
\end_layout
|
|
||||||
|
|
||||||
\begin_deeper
|
|
||||||
\begin_layout Itemize
|
|
||||||
Extra flags to pass when compiling files using platform-dependent code for
|
|
||||||
target architecture.
|
|
||||||
\end_layout
|
|
||||||
|
|
||||||
\begin_layout Itemize
|
|
||||||
Default is blank.
|
|
||||||
\end_layout
|
|
||||||
|
|
||||||
\end_deeper
|
|
||||||
\begin_layout Itemize
|
|
||||||
USER_PLATFORM_LDFLAGS=<flags>
|
|
||||||
\end_layout
|
|
||||||
|
|
||||||
\begin_deeper
|
|
||||||
\begin_layout Itemize
|
|
||||||
Extra flags to pass when linking files using platform-dependent code for
|
|
||||||
target architecture.
|
|
||||||
\end_layout
|
|
||||||
|
|
||||||
\begin_layout Itemize
|
|
||||||
Default is blank.
|
|
||||||
\end_layout
|
|
||||||
|
|
||||||
\end_deeper
|
|
||||||
\begin_layout Itemize
|
|
||||||
FONT_SRC=<file>
|
|
||||||
\end_layout
|
|
||||||
|
|
||||||
\begin_deeper
|
|
||||||
\begin_layout Itemize
|
|
||||||
Set the font file to use.
|
|
||||||
\end_layout
|
|
||||||
|
|
||||||
\begin_layout Itemize
|
|
||||||
Currently the valid values are:
|
|
||||||
\end_layout
|
|
||||||
|
|
||||||
\begin_deeper
|
|
||||||
\begin_layout Itemize
|
|
||||||
cp437.hex: Standard VGA font (256 characters).
|
|
||||||
\end_layout
|
|
||||||
|
|
||||||
\begin_layout Itemize
|
|
||||||
unifontfull-5.1.20080820.hex: GNU unifont (covers most of Unicode BMP)
|
|
||||||
\end_layout
|
|
||||||
|
|
||||||
\end_deeper
|
|
||||||
\begin_layout Itemize
|
|
||||||
Default is 'unifontfull-5.1.20080820.hex'
|
|
||||||
\end_layout
|
|
||||||
|
|
||||||
\end_deeper
|
|
||||||
\begin_layout Itemize
|
|
||||||
LUA=<package>
|
|
||||||
\end_layout
|
|
||||||
|
|
||||||
\begin_deeper
|
|
||||||
\begin_layout Itemize
|
|
||||||
Package to use for Lua support.
|
|
||||||
\end_layout
|
|
||||||
|
|
||||||
\begin_layout Itemize
|
|
||||||
Usually valid value is 'lua' or 'lua5.1'.
|
|
||||||
\end_layout
|
|
||||||
|
|
||||||
\begin_layout Itemize
|
|
||||||
Default is not to build Lua support.
|
|
||||||
\end_layout
|
|
||||||
|
|
||||||
\end_deeper
|
|
||||||
\begin_layout Itemize
|
|
||||||
THREADS=<value>
|
|
||||||
\end_layout
|
|
||||||
|
|
||||||
\begin_deeper
|
|
||||||
\begin_layout Itemize
|
|
||||||
Override platform default for dumper threading support.
|
|
||||||
\end_layout
|
|
||||||
|
|
||||||
\begin_layout Itemize
|
|
||||||
Threading is default on Linux.
|
|
||||||
\end_layout
|
|
||||||
|
|
||||||
\begin_layout Itemize
|
|
||||||
'YES' tries to use threading (std::thread).
|
|
||||||
\end_layout
|
|
||||||
|
|
||||||
\begin_layout Itemize
|
|
||||||
'BOOST' tries to use threading (boost::thread).
|
|
||||||
\end_layout
|
|
||||||
|
|
||||||
\begin_layout Itemize
|
|
||||||
'NO' disables threading.
|
|
||||||
\end_layout
|
|
||||||
|
|
||||||
\begin_layout Itemize
|
|
||||||
Note: This has absolutely nothing to do with platform threading.
|
|
||||||
\end_layout
|
|
||||||
|
|
||||||
\end_deeper
|
|
||||||
\begin_layout Itemize
|
|
||||||
BSNES_IS_COMPAT=<anything>
|
|
||||||
\end_layout
|
|
||||||
|
|
||||||
\begin_deeper
|
|
||||||
\begin_layout Itemize
|
|
||||||
Signals that BSNES core used is compatiblity core, not accuracy core.
|
|
||||||
\end_layout
|
|
||||||
|
|
||||||
\begin_layout Itemize
|
|
||||||
Default is to assume accuracy core.
|
|
||||||
\end_layout
|
|
||||||
|
|
||||||
\end_deeper
|
|
||||||
\begin_layout Itemize
|
|
||||||
SECRET_RABBIT_CODE=<anything>
|
|
||||||
\end_layout
|
|
||||||
|
|
||||||
\begin_deeper
|
|
||||||
\begin_layout Itemize
|
|
||||||
Signals that SRC (a.k.a.
|
|
||||||
libsamplerate) should be used for high-quality samplerate conversions.
|
|
||||||
\end_layout
|
|
||||||
|
|
||||||
\end_deeper
|
|
||||||
\begin_layout Itemize
|
|
||||||
JOYSTICK=<implementation>
|
|
||||||
\end_layout
|
|
||||||
|
|
||||||
\begin_deeper
|
|
||||||
\begin_layout Itemize
|
|
||||||
Set joystick implementation.
|
|
||||||
Valid values are:
|
|
||||||
\end_layout
|
|
||||||
|
|
||||||
\begin_deeper
|
|
||||||
\begin_layout Itemize
|
|
||||||
SDL: Use SDL for joystick (requires SDL graphics)
|
|
||||||
\end_layout
|
|
||||||
|
|
||||||
\begin_layout Itemize
|
|
||||||
EVDEV: Use EVDEV for joystick (Linux only).
|
|
||||||
\end_layout
|
|
||||||
|
|
||||||
\begin_layout Itemize
|
|
||||||
WIN32MM: Use Win32mm for joystick (Windows only).
|
|
||||||
\end_layout
|
|
||||||
|
|
||||||
\begin_layout Itemize
|
|
||||||
WXWIDGETS: Use Wxwidgets for joystick (requires WXWIDGETS graphics)
|
|
||||||
\end_layout
|
|
||||||
|
|
||||||
\begin_layout Itemize
|
|
||||||
DUMMY: Disable joystick support.
|
|
||||||
\end_layout
|
|
||||||
|
|
||||||
\end_deeper
|
|
||||||
\begin_layout Itemize
|
|
||||||
Default is SDL.
|
|
||||||
\end_layout
|
|
||||||
|
|
||||||
\end_deeper
|
|
||||||
\begin_layout Itemize
|
|
||||||
SOUND=<implementation>
|
|
||||||
\end_layout
|
|
||||||
|
|
||||||
\begin_deeper
|
|
||||||
\begin_layout Itemize
|
|
||||||
Set sound implementation.
|
|
||||||
Valid values are:
|
|
||||||
\end_layout
|
|
||||||
|
|
||||||
\begin_deeper
|
|
||||||
\begin_layout Itemize
|
|
||||||
SDL: Use SDL for sound (requires SDL graphics)
|
|
||||||
\end_layout
|
|
||||||
|
|
||||||
\begin_layout Itemize
|
|
||||||
PORTAUDIO: Use Portaudio for sound.
|
|
||||||
\end_layout
|
|
||||||
|
|
||||||
\begin_layout Itemize
|
|
||||||
DUMMY: Disable sound support
|
|
||||||
\end_layout
|
|
||||||
|
|
||||||
\end_deeper
|
|
||||||
\begin_layout Itemize
|
|
||||||
Default is SDL.
|
|
||||||
\end_layout
|
|
||||||
|
|
||||||
\end_deeper
|
|
||||||
\begin_layout Itemize
|
|
||||||
GRAPHICS=<implementation>
|
|
||||||
\end_layout
|
|
||||||
|
|
||||||
\begin_deeper
|
|
||||||
\begin_layout Itemize
|
\begin_layout Itemize
|
||||||
Set windowing library to use.
|
Copy bsnes sources (the bsnes subdirectory) to subdirectory 'bsnes'.
|
||||||
Valid values are:
|
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
\begin_deeper
|
|
||||||
\begin_layout Itemize
|
\begin_layout Itemize
|
||||||
SDL: Use SDL for graphics
|
Patch the bsnes sources with included patches (directory 'bsnes-patches/<version
|
||||||
|
>')
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
\begin_layout Itemize
|
\begin_layout Itemize
|
||||||
WXWIDGETS: Use wxWidgets for graphics.
|
Edit options.build (or copy of that file)
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
\end_deeper
|
|
||||||
\begin_layout Itemize
|
\begin_layout Itemize
|
||||||
Default is SDL.
|
Run make (passing 'OPTIONS=<filename>' if using something else than options.build
|
||||||
|
).
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
\end_deeper
|
|
||||||
\begin_layout Section
|
\begin_layout Section
|
||||||
Command line options
|
Command line options
|
||||||
\end_layout
|
\end_layout
|
||||||
|
@ -1642,6 +1337,15 @@ Hold/unhold button <button> on controller <num> (1-8).
|
||||||
See +controller for button names.
|
See +controller for button names.
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
|
\begin_layout Subsubsection
|
||||||
|
controllerf<num><button>
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\begin_layout Standard
|
||||||
|
Hold/unhold button <button> on controller <num> (1-8) for the next frame.
|
||||||
|
See +controller for button names.
|
||||||
|
\end_layout
|
||||||
|
|
||||||
\begin_layout Subsubsection
|
\begin_layout Subsubsection
|
||||||
autofire (<pattern>|-)...
|
autofire (<pattern>|-)...
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
176
manual.txt
176
manual.txt
|
@ -6,11 +6,11 @@ lsnes is SNES rerecording emulator based on bsnes core.
|
||||||
|
|
||||||
1. bsnes libsnes
|
1. bsnes libsnes
|
||||||
|
|
||||||
(a) v084 or 085
|
(a) v084-v087 (v084 or v085 for delayreset support)
|
||||||
|
|
||||||
(b) accuracy or compatiblity core.
|
(b) accuracy or compatiblity core with debugger enabled.
|
||||||
|
|
||||||
(c) Patched version (using included 6 patches)
|
(c) Patched version (using included 7 patches)
|
||||||
|
|
||||||
2. Zlib
|
2. Zlib
|
||||||
|
|
||||||
|
@ -18,7 +18,7 @@ lsnes is SNES rerecording emulator based on bsnes core.
|
||||||
|
|
||||||
4. boost_filesystem
|
4. boost_filesystem
|
||||||
|
|
||||||
5. boost_thread
|
5. boost_thread (if native std::thread is not available)
|
||||||
|
|
||||||
6. libsdl (SDL only)
|
6. libsdl (SDL only)
|
||||||
|
|
||||||
|
@ -30,163 +30,24 @@ lsnes is SNES rerecording emulator based on bsnes core.
|
||||||
|
|
||||||
10. Portaudio (portaudio sound only)
|
10. Portaudio (portaudio sound only)
|
||||||
|
|
||||||
11. std::thread and co (for threaded dumper only, not needed if
|
11. Lua (if Lua support is needed).
|
||||||
std::thread is available)
|
|
||||||
|
|
||||||
12. Lua (if Lua support is needed).
|
• Version 5.1.X or 5.2X.
|
||||||
|
|
||||||
• Version 5.1.X or 5.2X.
|
12. G++ 4.6 (bsnes doesn't seem to like 4.7).
|
||||||
|
|
||||||
3 Building
|
3 Building
|
||||||
|
|
||||||
Building is via makefile, the following options are available:
|
• Copy bsnes sources (the bsnes subdirectory) to subdirectory
|
||||||
|
'bsnes'.
|
||||||
|
|
||||||
• CROSS_PREFIX=<prefix>
|
• Patch the bsnes sources with included patches (directory
|
||||||
|
'bsnes-patches/<version>')
|
||||||
|
|
||||||
– Prefix to apply to commands when building executables /
|
• Edit options.build (or copy of that file)
|
||||||
object files for the target architecture.
|
|
||||||
|
|
||||||
– Default is blank.
|
• Run make (passing 'OPTIONS=<filename>' if using something else
|
||||||
|
than options.build).
|
||||||
• CC=<name>
|
|
||||||
|
|
||||||
– Name of C++ compiler.
|
|
||||||
|
|
||||||
– CROSS_PREFIX is prepended if compiling for target
|
|
||||||
architecture.
|
|
||||||
|
|
||||||
– This needs to be at least GCC 4.6.
|
|
||||||
|
|
||||||
– Set to 'g++-mp-4.6' if compiling on Mac OS X using GCC 4.6
|
|
||||||
from Macports.
|
|
||||||
|
|
||||||
– Default is 'g++'.
|
|
||||||
|
|
||||||
• HOSTCC=<name>
|
|
||||||
|
|
||||||
– Name of host C++ compiler.
|
|
||||||
|
|
||||||
– Default is value of 'CC' option.
|
|
||||||
|
|
||||||
• USER_HOSTCCFLAGS=<flags>:
|
|
||||||
|
|
||||||
– Compiler flags to pass when compiling/linking for host
|
|
||||||
architecture.
|
|
||||||
|
|
||||||
– Default is blank.
|
|
||||||
|
|
||||||
• USER_CFLAGS=<flags>
|
|
||||||
|
|
||||||
– Extra flags to pass when compiling for target architecture
|
|
||||||
|
|
||||||
– Default is blank.
|
|
||||||
|
|
||||||
• USER_LDFLAGS=<flags>:
|
|
||||||
|
|
||||||
– Extra flags to pass when linking for target architecture.
|
|
||||||
|
|
||||||
– Default is blank.
|
|
||||||
|
|
||||||
• USER_PLATFORM_CFLAGS=<flags>
|
|
||||||
|
|
||||||
– Extra flags to pass when compiling files using
|
|
||||||
platform-dependent code for target architecture.
|
|
||||||
|
|
||||||
– Default is blank.
|
|
||||||
|
|
||||||
• USER_PLATFORM_LDFLAGS=<flags>
|
|
||||||
|
|
||||||
– Extra flags to pass when linking files using
|
|
||||||
platform-dependent code for target architecture.
|
|
||||||
|
|
||||||
– Default is blank.
|
|
||||||
|
|
||||||
• FONT_SRC=<file>
|
|
||||||
|
|
||||||
– Set the font file to use.
|
|
||||||
|
|
||||||
– Currently the valid values are:
|
|
||||||
|
|
||||||
∗ cp437.hex: Standard VGA font (256 characters).
|
|
||||||
|
|
||||||
∗ unifontfull-5.1.20080820.hex: GNU unifont (covers most of
|
|
||||||
Unicode BMP)
|
|
||||||
|
|
||||||
– Default is 'unifontfull-5.1.20080820.hex'
|
|
||||||
|
|
||||||
• LUA=<package>
|
|
||||||
|
|
||||||
– Package to use for Lua support.
|
|
||||||
|
|
||||||
– Usually valid value is 'lua' or 'lua5.1'.
|
|
||||||
|
|
||||||
– Default is not to build Lua support.
|
|
||||||
|
|
||||||
• THREADS=<value>
|
|
||||||
|
|
||||||
– Override platform default for dumper threading support.
|
|
||||||
|
|
||||||
– Threading is default on Linux.
|
|
||||||
|
|
||||||
– 'YES' tries to use threading (std::thread).
|
|
||||||
|
|
||||||
– 'BOOST' tries to use threading (boost::thread).
|
|
||||||
|
|
||||||
– 'NO' disables threading.
|
|
||||||
|
|
||||||
– Note: This has absolutely nothing to do with platform
|
|
||||||
threading.
|
|
||||||
|
|
||||||
• BSNES_IS_COMPAT=<anything>
|
|
||||||
|
|
||||||
– Signals that BSNES core used is compatiblity core, not
|
|
||||||
accuracy core.
|
|
||||||
|
|
||||||
– Default is to assume accuracy core.
|
|
||||||
|
|
||||||
• SECRET_RABBIT_CODE=<anything>
|
|
||||||
|
|
||||||
– Signals that SRC (a.k.a. libsamplerate) should be used for
|
|
||||||
high-quality samplerate conversions.
|
|
||||||
|
|
||||||
• JOYSTICK=<implementation>
|
|
||||||
|
|
||||||
– Set joystick implementation. Valid values are:
|
|
||||||
|
|
||||||
∗ SDL: Use SDL for joystick (requires SDL graphics)
|
|
||||||
|
|
||||||
∗ EVDEV: Use EVDEV for joystick (Linux only).
|
|
||||||
|
|
||||||
∗ WIN32MM: Use Win32mm for joystick (Windows only).
|
|
||||||
|
|
||||||
∗ WXWIDGETS: Use Wxwidgets for joystick (requires WXWIDGETS
|
|
||||||
graphics)
|
|
||||||
|
|
||||||
∗ DUMMY: Disable joystick support.
|
|
||||||
|
|
||||||
– Default is SDL.
|
|
||||||
|
|
||||||
• SOUND=<implementation>
|
|
||||||
|
|
||||||
– Set sound implementation. Valid values are:
|
|
||||||
|
|
||||||
∗ SDL: Use SDL for sound (requires SDL graphics)
|
|
||||||
|
|
||||||
∗ PORTAUDIO: Use Portaudio for sound.
|
|
||||||
|
|
||||||
∗ DUMMY: Disable sound support
|
|
||||||
|
|
||||||
– Default is SDL.
|
|
||||||
|
|
||||||
• GRAPHICS=<implementation>
|
|
||||||
|
|
||||||
– Set windowing library to use. Valid values are:
|
|
||||||
|
|
||||||
∗ SDL: Use SDL for graphics
|
|
||||||
|
|
||||||
∗ WXWIDGETS: Use wxWidgets for graphics.
|
|
||||||
|
|
||||||
– Default is SDL.
|
|
||||||
|
|
||||||
4 Command line options
|
4 Command line options
|
||||||
|
|
||||||
|
@ -787,14 +648,19 @@ button names are known:
|
||||||
Hold/unhold button <button> on controller <num> (1-8). See
|
Hold/unhold button <button> on controller <num> (1-8). See
|
||||||
+controller for button names.
|
+controller for button names.
|
||||||
|
|
||||||
6.7.27 autofire (<pattern>|-)...
|
6.7.27 controllerf<num><button>
|
||||||
|
|
||||||
|
Hold/unhold button <button> on controller <num> (1-8) for the
|
||||||
|
next frame. See +controller for button names.
|
||||||
|
|
||||||
|
6.7.28 autofire (<pattern>|-)...
|
||||||
|
|
||||||
Set autofire pattern. Each parameter is comma-separated list of
|
Set autofire pattern. Each parameter is comma-separated list of
|
||||||
button names (in form of 1start, 1A, 2B, etc..) to hold on that
|
button names (in form of 1start, 1A, 2B, etc..) to hold on that
|
||||||
frame. After reaching the end of pattern, the pattern restarts
|
frame. After reaching the end of pattern, the pattern restarts
|
||||||
from the beginning.
|
from the beginning.
|
||||||
|
|
||||||
6.7.28 repaint
|
6.7.29 repaint
|
||||||
|
|
||||||
Force a repaint.
|
Force a repaint.
|
||||||
|
|
||||||
|
|
116
options.build
Normal file
116
options.build
Normal file
|
@ -0,0 +1,116 @@
|
||||||
|
#
|
||||||
|
# Host system:
|
||||||
|
# - The system lsnes is being built on.
|
||||||
|
# Target system:
|
||||||
|
# - The system the built lsnes will run on.
|
||||||
|
# - If not crosscompiling, this is the same as host system.
|
||||||
|
#
|
||||||
|
|
||||||
|
|
||||||
|
# Prefix to apply to compiler commands for the target system.
|
||||||
|
CROSS_PREFIX=
|
||||||
|
|
||||||
|
# Postfix for object files
|
||||||
|
OBJECT_SUFFIX=o
|
||||||
|
|
||||||
|
# Postfix for archive files
|
||||||
|
ARCHIVE_SUFFIX=a
|
||||||
|
|
||||||
|
# Postfix (including possible '.') for executable files.
|
||||||
|
# Usually blank for any unix-type system, '.exe' for Windows.
|
||||||
|
DOT_EXECUTABLE_SUFFIX=
|
||||||
|
|
||||||
|
# C++ compiler (GCC 4.6)
|
||||||
|
# CROSS_PREFIX is prepended to this.
|
||||||
|
CC=g++-4.6
|
||||||
|
|
||||||
|
# Linker for target system.
|
||||||
|
# CROSS_PREFIX is prepended to this.
|
||||||
|
LD=ld
|
||||||
|
|
||||||
|
# Ranlib for target system.
|
||||||
|
# CROSS_PREFIX is prepended to this.
|
||||||
|
RANLIB=ranlib
|
||||||
|
|
||||||
|
# Host system C++ compiler.
|
||||||
|
# If not crosscompiling, build host system and target system are one and the same.
|
||||||
|
# $(CC) means the same compiler as main C++ compiler to use (but without prefix). Otherwise, set to host C++ compiler.
|
||||||
|
HOSTCC=$(CC)
|
||||||
|
|
||||||
|
# Host C++ compiler/linker flags.
|
||||||
|
USER_HOSTCCFLAGS=
|
||||||
|
|
||||||
|
# C++ complier extra flags.
|
||||||
|
USER_CFLAGS=-g
|
||||||
|
|
||||||
|
# Linker extra flags.
|
||||||
|
USER_LDFLAGS=
|
||||||
|
|
||||||
|
# C++ compiler extra flags for platform code.
|
||||||
|
USER_PLATFORM_CFLAGS=
|
||||||
|
|
||||||
|
# Linker extra flags for platform code.
|
||||||
|
USER_PLATFORM_LDFLAGS=
|
||||||
|
|
||||||
|
# The name of font file to use.
|
||||||
|
# Currently supported:
|
||||||
|
# - cp437.hex: Standard VGA font (256 characters).
|
||||||
|
# - unifontfull-5.1.20080820.hex: GNU unifont (covers most of Unicode BMP)
|
||||||
|
FONT_SRC=unifontfull-5.1.20080820.hex
|
||||||
|
|
||||||
|
# Lua package to use.
|
||||||
|
# - Usually either 'lua' or 'lua5.1'.
|
||||||
|
# - Empty value disables Lua support.
|
||||||
|
LUA=lua
|
||||||
|
|
||||||
|
# Threading package to use.
|
||||||
|
# Currently supported:
|
||||||
|
# - NATIVE: std::thread
|
||||||
|
# - BOOST: boost_thread
|
||||||
|
THREADS=BOOST
|
||||||
|
|
||||||
|
# Graphics library to use.
|
||||||
|
# Currently supported:
|
||||||
|
# - SDL: Simple Directmedia Layer.
|
||||||
|
# - WXWIDGETS: wxWidgets
|
||||||
|
GRAPHICS=WXWIDGETS
|
||||||
|
|
||||||
|
# Sound library to use.
|
||||||
|
# Currently supported:
|
||||||
|
# - DUMMY: No sound.
|
||||||
|
# - SDL: Simple Directmedia Layer (GRAPHICS=SDL only).
|
||||||
|
# - PORTAUDIO: Portaudio.
|
||||||
|
SOUND=PORTAUDIO
|
||||||
|
|
||||||
|
# Joystick library to use.
|
||||||
|
# Currently supported:
|
||||||
|
# - DUMMY: No joystick.
|
||||||
|
# - EVDEV: EVDEV (Linux only)
|
||||||
|
# - WIN32MM: Windows Multimedia (Win32 only).
|
||||||
|
# - SDL: Simple Directmedia Layer (GRAPHICS=SDL only).
|
||||||
|
# - WXWIDGETS: wxWidgets (GRAPHICS=WXWIDGETS only)
|
||||||
|
JOYSTICK=DUMMY
|
||||||
|
|
||||||
|
# Enable use of Secret Rabbit Code (a.k.a. libsamperate).
|
||||||
|
# Set to non-blank (e.g. 'yes') to enable.
|
||||||
|
SECRET_RABBIT_CODE=
|
||||||
|
|
||||||
|
# Bsnes version used.
|
||||||
|
# 087 has different layout from the rest.
|
||||||
|
BSNES_VERSION=085
|
||||||
|
|
||||||
|
# Bsnes build uses compatiblity core, not accuracy core.
|
||||||
|
# Set to non-empty value (e.g. 'yes') if so.
|
||||||
|
BSNES_IS_COMPAT=
|
||||||
|
|
||||||
|
# Do boost libraries need the '-mt' prefix?
|
||||||
|
# Set to non-empty value (e.g. 'yes') if so.
|
||||||
|
BOOST_NEEDS_MT=
|
||||||
|
|
||||||
|
# Does the linker not need -rdynamic to export the symbols?
|
||||||
|
# Set to non-empty value (e.g. 'yes') if so.
|
||||||
|
NO_RDYNAMIC=
|
||||||
|
|
||||||
|
# Disable use of DLFCN.
|
||||||
|
# Set to non-empty value (e.g. 'yes') if so.
|
||||||
|
NO_DLFCN=
|
|
@ -7,6 +7,8 @@ LDFLAGS += -rdynamic
|
||||||
endif
|
endif
|
||||||
ifdef NO_DLFCN
|
ifdef NO_DLFCN
|
||||||
CFLAGS += -DNO_DLFCN
|
CFLAGS += -DNO_DLFCN
|
||||||
|
else
|
||||||
|
LDFLAGS += -ldl
|
||||||
endif
|
endif
|
||||||
|
|
||||||
DUMMY_LIBRARY=core lua fonts interface library video dummy
|
DUMMY_LIBRARY=core lua fonts interface library video dummy
|
||||||
|
|
|
@ -30,7 +30,7 @@ namespace
|
||||||
}
|
}
|
||||||
|
|
||||||
//Do button action.
|
//Do button action.
|
||||||
void do_button_action(unsigned ui_id, unsigned button, short newstate, bool autoh)
|
void do_button_action(unsigned ui_id, unsigned button, short newstate, int mode)
|
||||||
{
|
{
|
||||||
auto x = controls.lcid_to_pcid(ui_id);
|
auto x = controls.lcid_to_pcid(ui_id);
|
||||||
if(x.first < 0) {
|
if(x.first < 0) {
|
||||||
|
@ -42,11 +42,22 @@ namespace
|
||||||
messages << "Invalid button for controller type" << std::endl;
|
messages << "Invalid button for controller type" << std::endl;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(autoh) {
|
if(mode == 1) {
|
||||||
|
//Autohold.
|
||||||
controls.autohold(x.first, x.second, bid, controls.autohold(x.first, x.second, bid) ^
|
controls.autohold(x.first, x.second, bid, controls.autohold(x.first, x.second, bid) ^
|
||||||
newstate);
|
newstate);
|
||||||
information_dispatch::do_autohold_update(x.first, x.second, bid, controls.autohold(x.first,
|
information_dispatch::do_autohold_update(x.first, x.second, bid, controls.autohold(x.first,
|
||||||
x.second, bid));
|
x.second, bid));
|
||||||
|
} else if(mode == 2) {
|
||||||
|
//Framehold.
|
||||||
|
bool nstate = controls.framehold(x.first, x.second, bid) ^ newstate;
|
||||||
|
controls.framehold(x.first, x.second, bid, nstate);
|
||||||
|
if(nstate)
|
||||||
|
messages << "Holding " << (ui_id + 1) << get_logical_button_name(button)
|
||||||
|
<< " for the next frame" << std::endl;
|
||||||
|
else
|
||||||
|
messages << "Not holding " << (ui_id + 1) << get_logical_button_name(button)
|
||||||
|
<< " for the next frame" << std::endl;
|
||||||
} else
|
} else
|
||||||
controls.button(x.first, x.second, bid, newstate);
|
controls.button(x.first, x.second, bid, newstate);
|
||||||
}
|
}
|
||||||
|
@ -132,7 +143,14 @@ namespace
|
||||||
if(!buttonmap.count(button))
|
if(!buttonmap.count(button))
|
||||||
return;
|
return;
|
||||||
auto i = buttonmap[button];
|
auto i = buttonmap[button];
|
||||||
do_button_action(i.first, i.second, (type != 1) ? 1 : 0, (type == 2));
|
if(type == 0)
|
||||||
|
do_button_action(i.first, i.second, 1, 0);
|
||||||
|
else if(type == 1)
|
||||||
|
do_button_action(i.first, i.second, 0, 0);
|
||||||
|
else if(type == 2)
|
||||||
|
do_button_action(i.first, i.second, 1, 1);
|
||||||
|
else if(type == 3)
|
||||||
|
do_button_action(i.first, i.second, 1, 2);
|
||||||
update_movie_state();
|
update_movie_state();
|
||||||
information_dispatch::do_status_update();
|
information_dispatch::do_status_update();
|
||||||
}
|
}
|
||||||
|
@ -183,7 +201,7 @@ namespace
|
||||||
button_action_helper()
|
button_action_helper()
|
||||||
{
|
{
|
||||||
for(size_t i = 0; i < MAX_LOGICAL_BUTTONS; ++i)
|
for(size_t i = 0; i < MAX_LOGICAL_BUTTONS; ++i)
|
||||||
for(int j = 0; j < 3; ++j)
|
for(int j = 0; j < 4; ++j)
|
||||||
for(unsigned k = 0; k < 8; ++k) {
|
for(unsigned k = 0; k < 8; ++k) {
|
||||||
stringfmt x, y, expx;
|
stringfmt x, y, expx;
|
||||||
switch(j) {
|
switch(j) {
|
||||||
|
@ -196,6 +214,9 @@ namespace
|
||||||
case 2:
|
case 2:
|
||||||
x << "controllerh";
|
x << "controllerh";
|
||||||
break;
|
break;
|
||||||
|
case 3:
|
||||||
|
x << "controllerf";
|
||||||
|
break;
|
||||||
};
|
};
|
||||||
x << (k + 1) << get_logical_button_name(i);
|
x << (k + 1) << get_logical_button_name(i);
|
||||||
y << (k + 1) << get_logical_button_name(i);
|
y << (k + 1) << get_logical_button_name(i);
|
||||||
|
@ -203,6 +224,12 @@ namespace
|
||||||
our_commands.insert(new button_action(x.str(), j, k, y.str()));
|
our_commands.insert(new button_action(x.str(), j, k, y.str()));
|
||||||
if(j == 0)
|
if(j == 0)
|
||||||
our_icommands.insert(new inverse_key(x.str(), expx.str()));
|
our_icommands.insert(new inverse_key(x.str(), expx.str()));
|
||||||
|
if(j == 2)
|
||||||
|
our_icommands.insert(new inverse_key(x.str(), expx.str() +
|
||||||
|
" (hold)"));
|
||||||
|
if(j == 3)
|
||||||
|
our_icommands.insert(new inverse_key(x.str(), expx.str() +
|
||||||
|
" (typed)"));
|
||||||
}
|
}
|
||||||
for(unsigned k = 0; k < 8; ++k) {
|
for(unsigned k = 0; k < 8; ++k) {
|
||||||
stringfmt x, expx;
|
stringfmt x, expx;
|
||||||
|
|
|
@ -862,9 +862,9 @@ devicetype_t controller_state::pcid_to_type(unsigned port, unsigned pcid) throw(
|
||||||
controller_frame controller_state::get(uint64_t framenum) throw()
|
controller_frame controller_state::get(uint64_t framenum) throw()
|
||||||
{
|
{
|
||||||
if(_autofire.size())
|
if(_autofire.size())
|
||||||
return _input ^ _autohold ^ _autofire[framenum % _autofire.size()];
|
return _input ^ _framehold ^ _autohold ^ _autofire[framenum % _autofire.size()];
|
||||||
else
|
else
|
||||||
return _input ^ _autohold;
|
return _input ^ _framehold ^ _autohold;
|
||||||
}
|
}
|
||||||
|
|
||||||
void controller_state::analog(unsigned port, unsigned pcid, int x, int y) throw()
|
void controller_state::analog(unsigned port, unsigned pcid, int x, int y) throw()
|
||||||
|
@ -895,6 +895,21 @@ bool controller_state::autohold(unsigned port, unsigned pcid, unsigned pbid) thr
|
||||||
return (_autohold.axis(port, pcid, pbid) != 0);
|
return (_autohold.axis(port, pcid, pbid) != 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void controller_state::reset_framehold() throw()
|
||||||
|
{
|
||||||
|
_framehold = _framehold.blank_frame();
|
||||||
|
}
|
||||||
|
|
||||||
|
void controller_state::framehold(unsigned port, unsigned pcid, unsigned pbid, bool newstate) throw()
|
||||||
|
{
|
||||||
|
_framehold.axis(port, pcid, pbid, newstate ? 1 : 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool controller_state::framehold(unsigned port, unsigned pcid, unsigned pbid) throw()
|
||||||
|
{
|
||||||
|
return (_framehold.axis(port, pcid, pbid) != 0);
|
||||||
|
}
|
||||||
|
|
||||||
void controller_state::button(unsigned port, unsigned pcid, unsigned pbid, bool newstate) throw()
|
void controller_state::button(unsigned port, unsigned pcid, unsigned pbid, bool newstate) throw()
|
||||||
{
|
{
|
||||||
_input.axis(port, pcid, pbid, newstate ? 1 : 0);
|
_input.axis(port, pcid, pbid, newstate ? 1 : 0);
|
||||||
|
@ -931,6 +946,7 @@ void controller_state::set_port(unsigned port, porttype_t ptype, bool set_core)
|
||||||
_input.set_port_type(port, ptype);
|
_input.set_port_type(port, ptype);
|
||||||
_autohold.set_port_type(port, ptype);
|
_autohold.set_port_type(port, ptype);
|
||||||
_committed.set_port_type(port, ptype);
|
_committed.set_port_type(port, ptype);
|
||||||
|
_framehold.set_port_type(port, ptype);
|
||||||
//The old autofire pattern no longer applies.
|
//The old autofire pattern no longer applies.
|
||||||
_autofire.clear();
|
_autofire.clear();
|
||||||
}
|
}
|
||||||
|
|
|
@ -782,6 +782,7 @@ namespace
|
||||||
if(cycles == 0)
|
if(cycles == 0)
|
||||||
messages << "SNES reset" << std::endl;
|
messages << "SNES reset" << std::endl;
|
||||||
else if(cycles > 0) {
|
else if(cycles > 0) {
|
||||||
|
#if defined(BSNES_V084) || defined(BSNES_V085)
|
||||||
messages << "Executing delayed reset... This can take some time!" << std::endl;
|
messages << "Executing delayed reset... This can take some time!" << std::endl;
|
||||||
delayreset_cycles_run = 0;
|
delayreset_cycles_run = 0;
|
||||||
delayreset_cycles_target = cycles;
|
delayreset_cycles_target = cycles;
|
||||||
|
@ -792,6 +793,10 @@ namespace
|
||||||
messages << "SNES reset (delayed " << delayreset_cycles_run << ")" << std::endl;
|
messages << "SNES reset (delayed " << delayreset_cycles_run << ")" << std::endl;
|
||||||
else
|
else
|
||||||
messages << "SNES reset (forced at " << delayreset_cycles_run << ")" << std::endl;
|
messages << "SNES reset (forced at " << delayreset_cycles_run << ")" << std::endl;
|
||||||
|
#else
|
||||||
|
messages << "Delayresets not supported on this bsnes version (needs v084 or v085)"
|
||||||
|
<< std::endl;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
SNES::system.reset();
|
SNES::system.reset();
|
||||||
lua_callback_do_reset();
|
lua_callback_do_reset();
|
||||||
|
@ -869,6 +874,7 @@ void main_loop(struct loaded_rom& rom, struct moviefile& initial, bool load_has_
|
||||||
amode = ADVANCE_SKIPLAG;
|
amode = ADVANCE_SKIPLAG;
|
||||||
|
|
||||||
if(!first_round) {
|
if(!first_round) {
|
||||||
|
controls.reset_framehold();
|
||||||
resetcycles = movb.new_frame_starting(amode == ADVANCE_SKIPLAG);
|
resetcycles = movb.new_frame_starting(amode == ADVANCE_SKIPLAG);
|
||||||
if(amode == ADVANCE_QUIT && queued_saves.empty())
|
if(amode == ADVANCE_QUIT && queued_saves.empty())
|
||||||
break;
|
break;
|
||||||
|
@ -890,6 +896,7 @@ void main_loop(struct loaded_rom& rom, struct moviefile& initial, bool load_has_
|
||||||
else
|
else
|
||||||
amode = old_mode;
|
amode = old_mode;
|
||||||
just_did_loadstate = first_round;
|
just_did_loadstate = first_round;
|
||||||
|
controls.reset_framehold();
|
||||||
continue;
|
continue;
|
||||||
} else if(r < 0) {
|
} else if(r < 0) {
|
||||||
//Not exactly desriable, but this at least won't desync.
|
//Not exactly desriable, but this at least won't desync.
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
OBJECTS=$(patsubst %.cpp,%.$(OBJECT_SUFFIX),$(wildcard *.cpp)) avi/__all__.o
|
OBJECTS=$(patsubst %.cpp,%.$(OBJECT_SUFFIX),$(wildcard *.cpp)) avi/__all__.$(OBJECT_SUFFIX)
|
||||||
|
|
||||||
ifdef SECRET_RABBIT_CODE
|
ifdef SECRET_RABBIT_CODE
|
||||||
AVI_CFLAGS=-DWITH_SECRET_RABBIT_CODE
|
AVI_CFLAGS=-DWITH_SECRET_RABBIT_CODE
|
||||||
|
@ -7,8 +7,6 @@ endif
|
||||||
|
|
||||||
.PRECIOUS: %.$(OBJECT_SUFFIX)
|
.PRECIOUS: %.$(OBJECT_SUFFIX)
|
||||||
|
|
||||||
export VIDEO_CFLAGS
|
|
||||||
|
|
||||||
__all__.$(OBJECT_SUFFIX): $(OBJECTS)
|
__all__.$(OBJECT_SUFFIX): $(OBJECTS)
|
||||||
$(REALLD) -r -o $@ $^
|
$(REALLD) -r -o $@ $^
|
||||||
echo $(AVI_LDFLAGS) >__all__.ldflags
|
echo $(AVI_LDFLAGS) >__all__.ldflags
|
||||||
|
|
|
@ -1,15 +1,15 @@
|
||||||
OBJECTS=$(patsubst %.cpp,%.$(OBJECT_SUFFIX),$(wildcard *.cpp)) codec/__all__.o
|
OBJECTS=$(patsubst %.cpp,%.$(OBJECT_SUFFIX),$(wildcard *.cpp)) codec/__all__.$(OBJECT_SUFFIX)
|
||||||
|
|
||||||
.PRECIOUS: %.$(OBJECT_SUFFIX)
|
.PRECIOUS: %.$(OBJECT_SUFFIX)
|
||||||
|
|
||||||
__all__.o: $(OBJECTS)
|
__all__.$(OBJECT_SUFFIX): $(OBJECTS)
|
||||||
$(REALLD) -r -o $@ $^
|
$(REALLD) -r -o $@ $^
|
||||||
|
|
||||||
codec/__all__.o: forcelook
|
codec/__all__.$(OBJECT_SUFFIX): forcelook
|
||||||
$(MAKE) -C codec
|
$(MAKE) -C codec
|
||||||
|
|
||||||
%.$(OBJECT_SUFFIX): %.cpp
|
%.$(OBJECT_SUFFIX): %.cpp
|
||||||
$(REALCC) $(CFLAGS) -c -o $@ $< -I../../../include $(VIDEO_CLFAGS)
|
$(REALCC) $(CFLAGS) -c -o $@ $< -I../../../include
|
||||||
|
|
||||||
forcelook:
|
forcelook:
|
||||||
@true
|
@true
|
||||||
|
|
|
@ -12,7 +12,7 @@ video/__all__.$(OBJECT_SUFFIX): forcelook
|
||||||
$(MAKE) -C video
|
$(MAKE) -C video
|
||||||
|
|
||||||
%.$(OBJECT_SUFFIX): %.cpp
|
%.$(OBJECT_SUFFIX): %.cpp
|
||||||
$(REALCC) $(CFLAGS) -c -o $@ $< -I../../include $(VIDEO_CLFAGS)
|
$(REALCC) $(CFLAGS) -c -o $@ $< -I../../include
|
||||||
|
|
||||||
forcelook:
|
forcelook:
|
||||||
@true
|
@true
|
||||||
|
|
|
@ -2,13 +2,11 @@ OBJECTS=$(patsubst %.cpp,%.$(OBJECT_SUFFIX),$(wildcard *.cpp))
|
||||||
|
|
||||||
.PRECIOUS: %.$(OBJECT_SUFFIX)
|
.PRECIOUS: %.$(OBJECT_SUFFIX)
|
||||||
|
|
||||||
export VIDEO_CFLAGS
|
__all__.$(OBJECT_SUFFIX): $(OBJECTS)
|
||||||
|
|
||||||
__all__.o: $(OBJECTS)
|
|
||||||
$(REALLD) -r -o $@ $^
|
$(REALLD) -r -o $@ $^
|
||||||
|
|
||||||
%.$(OBJECT_SUFFIX): %.cpp
|
%.$(OBJECT_SUFFIX): %.cpp
|
||||||
$(REALCC) $(CFLAGS) -c -o $@ $< -I../../../../../include $(VIDEO_CLFAGS)
|
$(REALCC) $(CFLAGS) -c -o $@ $< -I../../../../../include
|
||||||
|
|
||||||
precheck:
|
precheck:
|
||||||
@true
|
@true
|
||||||
|
|
|
@ -2,13 +2,11 @@ OBJECTS=$(patsubst %.cpp,%.$(OBJECT_SUFFIX),$(wildcard *.cpp))
|
||||||
|
|
||||||
.PRECIOUS: %.$(OBJECT_SUFFIX)
|
.PRECIOUS: %.$(OBJECT_SUFFIX)
|
||||||
|
|
||||||
export VIDEO_CFLAGS
|
__all__.$(OBJECT_SUFFIX): $(OBJECTS)
|
||||||
|
|
||||||
__all__.o: $(OBJECTS)
|
|
||||||
$(REALLD) -r -o $@ $^
|
$(REALLD) -r -o $@ $^
|
||||||
|
|
||||||
%.$(OBJECT_SUFFIX): %.cpp
|
%.$(OBJECT_SUFFIX): %.cpp
|
||||||
$(REALCC) $(CFLAGS) -c -o $@ $< -I../../../../../include $(VIDEO_CLFAGS)
|
$(REALCC) $(CFLAGS) -c -o $@ $< -I../../../../../include
|
||||||
|
|
||||||
precheck:
|
precheck:
|
||||||
@true
|
@true
|
||||||
|
|
Loading…
Add table
Reference in a new issue