Merge pull request #818 from linkmauve/no-trailing-whitespace

Ban trailing whitespace from the entire project, forever
This commit is contained in:
Yuri Kunde Schlesner 2015-05-29 15:09:26 -07:00
commit a489a84656
65 changed files with 218 additions and 212 deletions

View file

@ -3,10 +3,16 @@
set -e set -e
set -x set -x
if grep -r '\s$' src *.yml *.txt *.md Doxyfile .gitignore .gitmodules .travis* dist/*.desktop \
dist/*.svg dist/*.xml; then
echo Trailing whitespace found, aborting
exit 1
fi
#if OS is linux or is not set #if OS is linux or is not set
if [ "$TRAVIS_OS_NAME" = "linux" -o -z "$TRAVIS_OS_NAME" ]; then if [ "$TRAVIS_OS_NAME" = "linux" -o -z "$TRAVIS_OS_NAME" ]; then
mkdir build && cd build mkdir build && cd build
cmake -DUSE_QT5=OFF .. cmake -DUSE_QT5=OFF ..
make -j4 make -j4
elif [ "$TRAVIS_OS_NAME" = "osx" ]; then elif [ "$TRAVIS_OS_NAME" = "osx" ]; then
export Qt5_DIR=$(brew --prefix)/opt/qt5 export Qt5_DIR=$(brew --prefix)/opt/qt5

View file

@ -6,7 +6,7 @@ if [ "$TRAVIS_BRANCH" = "master" ]; then
REV_NAME="citra-${GITDATE}-${GITREV}-linux-amd64" REV_NAME="citra-${GITDATE}-${GITREV}-linux-amd64"
UPLOAD_DIR="/citra/nightly/linux-amd64" UPLOAD_DIR="/citra/nightly/linux-amd64"
mkdir "$REV_NAME" mkdir "$REV_NAME"
sudo apt-get -qq install lftp sudo apt-get -qq install lftp
cp build/src/citra/citra "$REV_NAME" cp build/src/citra/citra "$REV_NAME"
cp build/src/citra_qt/citra-qt "$REV_NAME" cp build/src/citra_qt/citra-qt "$REV_NAME"
@ -14,7 +14,7 @@ if [ "$TRAVIS_BRANCH" = "master" ]; then
REV_NAME="citra-${GITDATE}-${GITREV}-osx-amd64" REV_NAME="citra-${GITDATE}-${GITREV}-osx-amd64"
UPLOAD_DIR="/citra/nightly/osx-amd64" UPLOAD_DIR="/citra/nightly/osx-amd64"
mkdir "$REV_NAME" mkdir "$REV_NAME"
brew install lftp brew install lftp
cp build/src/citra/Release/citra "$REV_NAME" cp build/src/citra/Release/citra "$REV_NAME"
cp -r build/src/citra_qt/Release/citra-qt.app "$REV_NAME" cp -r build/src/citra_qt/Release/citra-qt.app "$REV_NAME"
@ -22,7 +22,7 @@ if [ "$TRAVIS_BRANCH" = "master" ]; then
# move qt libs into app bundle for deployment # move qt libs into app bundle for deployment
$(brew --prefix)/opt/qt5/bin/macdeployqt "${REV_NAME}/citra-qt.app" $(brew --prefix)/opt/qt5/bin/macdeployqt "${REV_NAME}/citra-qt.app"
fi fi
ARCHIVE_NAME="${REV_NAME}.tar.xz" ARCHIVE_NAME="${REV_NAME}.tar.xz"
tar -cJvf "$ARCHIVE_NAME" "$REV_NAME" tar -cJvf "$ARCHIVE_NAME" "$REV_NAME"
lftp -c "open -u citra-builds,$BUILD_PASSWORD sftp://builds.citra-emu.org; put -O '$UPLOAD_DIR' '$ARCHIVE_NAME'" lftp -c "open -u citra-builds,$BUILD_PASSWORD sftp://builds.citra-emu.org; put -O '$UPLOAD_DIR' '$ARCHIVE_NAME'"

View file

@ -6,7 +6,7 @@ language: cpp
env: env:
global: global:
- secure: "AXHFIafTmbGDsHD3mUVj5a4I397DQjti/WoqAJGUp2PglxTcc04BwxZ9Z+xLuf5N2Hs5r9ojAJLT8OGxJCLBDXzneQTNSqXbFuYSLbqrEAiIRlA9eRIotWCg+wYcO+5e8MKX+cHVKwiIWasUB21AtCdq6msh6Y3pUshZp212VPg=" - secure: "AXHFIafTmbGDsHD3mUVj5a4I397DQjti/WoqAJGUp2PglxTcc04BwxZ9Z+xLuf5N2Hs5r9ojAJLT8OGxJCLBDXzneQTNSqXbFuYSLbqrEAiIRlA9eRIotWCg+wYcO+5e8MKX+cHVKwiIWasUB21AtCdq6msh6Y3pUshZp212VPg="
before_install: before_install:
- sh .travis-deps.sh - sh .travis-deps.sh

View file

@ -38,7 +38,7 @@ else()
set(CMAKE_CXX_FLAGS_RELEASE "${optimization_flags} /MP /MD" CACHE STRING "" FORCE) set(CMAKE_CXX_FLAGS_RELEASE "${optimization_flags} /MP /MD" CACHE STRING "" FORCE)
set(CMAKE_C_FLAGS_RELWITHDEBINFO "${optimization_flags} /MP /MD /Zi /Zo" CACHE STRING "" FORCE) set(CMAKE_C_FLAGS_RELWITHDEBINFO "${optimization_flags} /MP /MD /Zi /Zo" CACHE STRING "" FORCE)
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${optimization_flags} /MP /MD /Zi /Zo" CACHE STRING "" FORCE) set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${optimization_flags} /MP /MD /Zi /Zo" CACHE STRING "" FORCE)
set(CMAKE_EXE_LINKER_FLAGS_DEBUG "/DEBUG" CACHE STRING "" FORCE) set(CMAKE_EXE_LINKER_FLAGS_DEBUG "/DEBUG" CACHE STRING "" FORCE)
set(CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "/DEBUG" CACHE STRING "" FORCE) set(CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "/DEBUG" CACHE STRING "" FORCE)
endif() endif()
@ -130,7 +130,7 @@ IF (APPLE)
FIND_LIBRARY(IOKIT_LIBRARY IOKit) # GLFW dependency FIND_LIBRARY(IOKIT_LIBRARY IOKit) # GLFW dependency
FIND_LIBRARY(COREVIDEO_LIBRARY CoreVideo) # GLFW dependency FIND_LIBRARY(COREVIDEO_LIBRARY CoreVideo) # GLFW dependency
set(PLATFORM_LIBRARIES iconv ${COCOA_LIBRARY} ${IOKIT_LIBRARY} ${COREVIDEO_LIBRARY}) set(PLATFORM_LIBRARIES iconv ${COCOA_LIBRARY} ${IOKIT_LIBRARY} ${COREVIDEO_LIBRARY})
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -stdlib=libc++") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -stdlib=libc++")
ELSEIF(MINGW) ELSEIF(MINGW)

124
Doxyfile
View file

@ -38,7 +38,7 @@ PROJECT_NAME = Citra
# could be handy for archiving the generated documentation or if some version # could be handy for archiving the generated documentation or if some version
# control system is used. # control system is used.
PROJECT_NUMBER = PROJECT_NUMBER =
# Using the PROJECT_BRIEF tag one can provide an optional one line description # Using the PROJECT_BRIEF tag one can provide an optional one line description
# for a project that appears at the top of each page and should give viewer a # for a project that appears at the top of each page and should give viewer a
@ -162,7 +162,7 @@ FULL_PATH_NAMES = YES
# will be relative from the directory where doxygen is started. # will be relative from the directory where doxygen is started.
# This tag requires that the tag FULL_PATH_NAMES is set to YES. # This tag requires that the tag FULL_PATH_NAMES is set to YES.
STRIP_FROM_PATH = STRIP_FROM_PATH =
# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the
# path mentioned in the documentation of a class, which tells the reader which # path mentioned in the documentation of a class, which tells the reader which
@ -171,7 +171,7 @@ STRIP_FROM_PATH =
# specify the list of include paths that are normally passed to the compiler # specify the list of include paths that are normally passed to the compiler
# using the -I flag. # using the -I flag.
STRIP_FROM_INC_PATH = STRIP_FROM_INC_PATH =
# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but
# less readable) file names. This can be useful is your file systems doesn't # less readable) file names. This can be useful is your file systems doesn't
@ -238,13 +238,13 @@ TAB_SIZE = 4
# "Side Effects:". You can put \n's in the value part of an alias to insert # "Side Effects:". You can put \n's in the value part of an alias to insert
# newlines. # newlines.
ALIASES = ALIASES =
# This tag can be used to specify a number of word-keyword mappings (TCL only). # This tag can be used to specify a number of word-keyword mappings (TCL only).
# A mapping has the form "name=value". For example adding "class=itcl::class" # A mapping has the form "name=value". For example adding "class=itcl::class"
# will allow you to use the command class in the itcl::class meaning. # will allow you to use the command class in the itcl::class meaning.
TCL_SUBST = TCL_SUBST =
# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
# only. Doxygen will then generate output that is more tailored for C. For # only. Doxygen will then generate output that is more tailored for C. For
@ -291,7 +291,7 @@ OPTIMIZE_OUTPUT_VHDL = NO
# Note that for custom extensions you also need to set FILE_PATTERNS otherwise # Note that for custom extensions you also need to set FILE_PATTERNS otherwise
# the files are not read by doxygen. # the files are not read by doxygen.
EXTENSION_MAPPING = EXTENSION_MAPPING =
# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments # If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments
# according to the Markdown format, which allows for more readable # according to the Markdown format, which allows for more readable
@ -627,7 +627,7 @@ GENERATE_DEPRECATEDLIST= YES
# sections, marked by \if <section_label> ... \endif and \cond <section_label> # sections, marked by \if <section_label> ... \endif and \cond <section_label>
# ... \endcond blocks. # ... \endcond blocks.
ENABLED_SECTIONS = ENABLED_SECTIONS =
# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the # The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the
# initial value of a variable or macro / define can have for it to appear in the # initial value of a variable or macro / define can have for it to appear in the
@ -669,7 +669,7 @@ SHOW_NAMESPACES = YES
# by doxygen. Whatever the program writes to standard output is used as the file # by doxygen. Whatever the program writes to standard output is used as the file
# version. For an example see the documentation. # version. For an example see the documentation.
FILE_VERSION_FILTER = FILE_VERSION_FILTER =
# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
# by doxygen. The layout file controls the global structure of the generated # by doxygen. The layout file controls the global structure of the generated
@ -682,7 +682,7 @@ FILE_VERSION_FILTER =
# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE # DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE
# tag is left empty. # tag is left empty.
LAYOUT_FILE = LAYOUT_FILE =
# The CITE_BIB_FILES tag can be used to specify one or more bib files containing # The CITE_BIB_FILES tag can be used to specify one or more bib files containing
# the reference definitions. This must be a list of .bib files. The .bib # the reference definitions. This must be a list of .bib files. The .bib
@ -692,7 +692,7 @@ LAYOUT_FILE =
# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the # LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the
# search path. See also \cite for info how to create references. # search path. See also \cite for info how to create references.
CITE_BIB_FILES = CITE_BIB_FILES =
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# Configuration options related to warning and progress messages # Configuration options related to warning and progress messages
@ -751,7 +751,7 @@ WARN_FORMAT = "$file:$line: $text"
# messages should be written. If left blank the output is written to standard # messages should be written. If left blank the output is written to standard
# error (stderr). # error (stderr).
WARN_LOGFILE = WARN_LOGFILE =
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# Configuration options related to the input files # Configuration options related to the input files
@ -807,7 +807,7 @@ RECURSIVE = YES
# Note that relative paths are relative to the directory from which doxygen is # Note that relative paths are relative to the directory from which doxygen is
# run. # run.
EXCLUDE = EXCLUDE =
# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or # The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
# directories that are symbolic links (a Unix file system feature) are excluded # directories that are symbolic links (a Unix file system feature) are excluded
@ -823,7 +823,7 @@ EXCLUDE_SYMLINKS = NO
# Note that the wildcards are matched against the file with absolute path, so to # Note that the wildcards are matched against the file with absolute path, so to
# exclude all test directories for example use the pattern */test/* # exclude all test directories for example use the pattern */test/*
EXCLUDE_PATTERNS = EXCLUDE_PATTERNS =
# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
# (namespaces, classes, functions, etc.) that should be excluded from the # (namespaces, classes, functions, etc.) that should be excluded from the
@ -834,13 +834,13 @@ EXCLUDE_PATTERNS =
# Note that the wildcards are matched against the file with absolute path, so to # Note that the wildcards are matched against the file with absolute path, so to
# exclude all test directories use the pattern */test/* # exclude all test directories use the pattern */test/*
EXCLUDE_SYMBOLS = EXCLUDE_SYMBOLS =
# The EXAMPLE_PATH tag can be used to specify one or more files or directories # The EXAMPLE_PATH tag can be used to specify one or more files or directories
# that contain example code fragments that are included (see the \include # that contain example code fragments that are included (see the \include
# command). # command).
EXAMPLE_PATH = EXAMPLE_PATH =
# If the value of the EXAMPLE_PATH tag contains directories, you can use the # If the value of the EXAMPLE_PATH tag contains directories, you can use the
# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and
@ -860,7 +860,7 @@ EXAMPLE_RECURSIVE = NO
# that contain images that are to be included in the documentation (see the # that contain images that are to be included in the documentation (see the
# \image command). # \image command).
IMAGE_PATH = IMAGE_PATH =
# The INPUT_FILTER tag can be used to specify a program that doxygen should # The INPUT_FILTER tag can be used to specify a program that doxygen should
# invoke to filter for each input file. Doxygen will invoke the filter program # invoke to filter for each input file. Doxygen will invoke the filter program
@ -877,7 +877,7 @@ IMAGE_PATH =
# code is scanned, but not when the output code is generated. If lines are added # code is scanned, but not when the output code is generated. If lines are added
# or removed, the anchors will not be placed correctly. # or removed, the anchors will not be placed correctly.
INPUT_FILTER = INPUT_FILTER =
# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
# basis. Doxygen will compare the file name with each pattern and apply the # basis. Doxygen will compare the file name with each pattern and apply the
@ -886,7 +886,7 @@ INPUT_FILTER =
# filters are used. If the FILTER_PATTERNS tag is empty or if none of the # filters are used. If the FILTER_PATTERNS tag is empty or if none of the
# patterns match the file name, INPUT_FILTER is applied. # patterns match the file name, INPUT_FILTER is applied.
FILTER_PATTERNS = FILTER_PATTERNS =
# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
# INPUT_FILTER ) will also be used to filter the input files that are used for # INPUT_FILTER ) will also be used to filter the input files that are used for
@ -901,14 +901,14 @@ FILTER_SOURCE_FILES = NO
# *.ext= (so without naming a filter). # *.ext= (so without naming a filter).
# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. # This tag requires that the tag FILTER_SOURCE_FILES is set to YES.
FILTER_SOURCE_PATTERNS = FILTER_SOURCE_PATTERNS =
# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that # If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that
# is part of the input, its contents will be placed on the main page # is part of the input, its contents will be placed on the main page
# (index.html). This can be useful if you have a project on for instance GitHub # (index.html). This can be useful if you have a project on for instance GitHub
# and want to reuse the introduction page also for the doxygen output. # and want to reuse the introduction page also for the doxygen output.
USE_MDFILE_AS_MAINPAGE = USE_MDFILE_AS_MAINPAGE =
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# Configuration options related to source browsing # Configuration options related to source browsing
@ -1013,7 +1013,7 @@ CLANG_ASSISTED_PARSING = NO
# specified with INPUT and INCLUDE_PATH. # specified with INPUT and INCLUDE_PATH.
# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. # This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES.
CLANG_OPTIONS = CLANG_OPTIONS =
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# Configuration options related to the alphabetical class index # Configuration options related to the alphabetical class index
@ -1039,7 +1039,7 @@ COLS_IN_ALPHA_INDEX = 5
# while generating the index headers. # while generating the index headers.
# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. # This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
IGNORE_PREFIX = IGNORE_PREFIX =
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# Configuration options related to the HTML output # Configuration options related to the HTML output
@ -1083,7 +1083,7 @@ HTML_FILE_EXTENSION = .html
# of the possible markers and block names see the documentation. # of the possible markers and block names see the documentation.
# This tag requires that the tag GENERATE_HTML is set to YES. # This tag requires that the tag GENERATE_HTML is set to YES.
HTML_HEADER = HTML_HEADER =
# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each # The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each
# generated HTML page. If the tag is left blank doxygen will generate a standard # generated HTML page. If the tag is left blank doxygen will generate a standard
@ -1093,7 +1093,7 @@ HTML_HEADER =
# that doxygen normally uses. # that doxygen normally uses.
# This tag requires that the tag GENERATE_HTML is set to YES. # This tag requires that the tag GENERATE_HTML is set to YES.
HTML_FOOTER = HTML_FOOTER =
# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style # The HTML_STYLESHEET tag can be used to specify a user-defined cascading style
# sheet that is used by each HTML page. It can be used to fine-tune the look of # sheet that is used by each HTML page. It can be used to fine-tune the look of
@ -1105,7 +1105,7 @@ HTML_FOOTER =
# obsolete. # obsolete.
# This tag requires that the tag GENERATE_HTML is set to YES. # This tag requires that the tag GENERATE_HTML is set to YES.
HTML_STYLESHEET = HTML_STYLESHEET =
# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined # The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined
# cascading style sheets that are included after the standard style sheets # cascading style sheets that are included after the standard style sheets
@ -1118,7 +1118,7 @@ HTML_STYLESHEET =
# list). For an example see the documentation. # list). For an example see the documentation.
# This tag requires that the tag GENERATE_HTML is set to YES. # This tag requires that the tag GENERATE_HTML is set to YES.
HTML_EXTRA_STYLESHEET = HTML_EXTRA_STYLESHEET =
# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or # The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
# other source files which should be copied to the HTML output directory. Note # other source files which should be copied to the HTML output directory. Note
@ -1128,7 +1128,7 @@ HTML_EXTRA_STYLESHEET =
# files will be copied as-is; there are no commands or markers available. # files will be copied as-is; there are no commands or markers available.
# This tag requires that the tag GENERATE_HTML is set to YES. # This tag requires that the tag GENERATE_HTML is set to YES.
HTML_EXTRA_FILES = HTML_EXTRA_FILES =
# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen # The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen
# will adjust the colors in the stylesheet and background images according to # will adjust the colors in the stylesheet and background images according to
@ -1256,7 +1256,7 @@ GENERATE_HTMLHELP = NO
# written to the html output directory. # written to the html output directory.
# This tag requires that the tag GENERATE_HTMLHELP is set to YES. # This tag requires that the tag GENERATE_HTMLHELP is set to YES.
CHM_FILE = CHM_FILE =
# The HHC_LOCATION tag can be used to specify the location (absolute path # The HHC_LOCATION tag can be used to specify the location (absolute path
# including file name) of the HTML help compiler ( hhc.exe). If non-empty # including file name) of the HTML help compiler ( hhc.exe). If non-empty
@ -1264,7 +1264,7 @@ CHM_FILE =
# The file has to be specified with full path. # The file has to be specified with full path.
# This tag requires that the tag GENERATE_HTMLHELP is set to YES. # This tag requires that the tag GENERATE_HTMLHELP is set to YES.
HHC_LOCATION = HHC_LOCATION =
# The GENERATE_CHI flag controls if a separate .chi index file is generated ( # The GENERATE_CHI flag controls if a separate .chi index file is generated (
# YES) or that it should be included in the master .chm file ( NO). # YES) or that it should be included in the master .chm file ( NO).
@ -1277,7 +1277,7 @@ GENERATE_CHI = NO
# and project file content. # and project file content.
# This tag requires that the tag GENERATE_HTMLHELP is set to YES. # This tag requires that the tag GENERATE_HTMLHELP is set to YES.
CHM_INDEX_ENCODING = CHM_INDEX_ENCODING =
# The BINARY_TOC flag controls whether a binary table of contents is generated ( # The BINARY_TOC flag controls whether a binary table of contents is generated (
# YES) or a normal table of contents ( NO) in the .chm file. Furthermore it # YES) or a normal table of contents ( NO) in the .chm file. Furthermore it
@ -1308,7 +1308,7 @@ GENERATE_QHP = NO
# the HTML output folder. # the HTML output folder.
# This tag requires that the tag GENERATE_QHP is set to YES. # This tag requires that the tag GENERATE_QHP is set to YES.
QCH_FILE = QCH_FILE =
# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help # The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help
# Project output. For more information please see Qt Help Project / Namespace # Project output. For more information please see Qt Help Project / Namespace
@ -1333,7 +1333,7 @@ QHP_VIRTUAL_FOLDER = doc
# filters). # filters).
# This tag requires that the tag GENERATE_QHP is set to YES. # This tag requires that the tag GENERATE_QHP is set to YES.
QHP_CUST_FILTER_NAME = QHP_CUST_FILTER_NAME =
# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the # The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the
# custom filter to add. For more information please see Qt Help Project / Custom # custom filter to add. For more information please see Qt Help Project / Custom
@ -1341,21 +1341,21 @@ QHP_CUST_FILTER_NAME =
# filters). # filters).
# This tag requires that the tag GENERATE_QHP is set to YES. # This tag requires that the tag GENERATE_QHP is set to YES.
QHP_CUST_FILTER_ATTRS = QHP_CUST_FILTER_ATTRS =
# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
# project's filter section matches. Qt Help Project / Filter Attributes (see: # project's filter section matches. Qt Help Project / Filter Attributes (see:
# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). # http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes).
# This tag requires that the tag GENERATE_QHP is set to YES. # This tag requires that the tag GENERATE_QHP is set to YES.
QHP_SECT_FILTER_ATTRS = QHP_SECT_FILTER_ATTRS =
# The QHG_LOCATION tag can be used to specify the location of Qt's # The QHG_LOCATION tag can be used to specify the location of Qt's
# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the # qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the
# generated .qhp file. # generated .qhp file.
# This tag requires that the tag GENERATE_QHP is set to YES. # This tag requires that the tag GENERATE_QHP is set to YES.
QHG_LOCATION = QHG_LOCATION =
# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be # If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be
# generated, together with the HTML files, they form an Eclipse help plugin. To # generated, together with the HTML files, they form an Eclipse help plugin. To
@ -1488,7 +1488,7 @@ MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest
# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols # MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols
# This tag requires that the tag USE_MATHJAX is set to YES. # This tag requires that the tag USE_MATHJAX is set to YES.
MATHJAX_EXTENSIONS = MATHJAX_EXTENSIONS =
# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces # The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces
# of code that will be used on startup of the MathJax code. See the MathJax site # of code that will be used on startup of the MathJax code. See the MathJax site
@ -1496,7 +1496,7 @@ MATHJAX_EXTENSIONS =
# example see the documentation. # example see the documentation.
# This tag requires that the tag USE_MATHJAX is set to YES. # This tag requires that the tag USE_MATHJAX is set to YES.
MATHJAX_CODEFILE = MATHJAX_CODEFILE =
# When the SEARCHENGINE tag is enabled doxygen will generate a search box for # When the SEARCHENGINE tag is enabled doxygen will generate a search box for
# the HTML output. The underlying search engine uses javascript and DHTML and # the HTML output. The underlying search engine uses javascript and DHTML and
@ -1556,7 +1556,7 @@ EXTERNAL_SEARCH = NO
# Searching" for details. # Searching" for details.
# This tag requires that the tag SEARCHENGINE is set to YES. # This tag requires that the tag SEARCHENGINE is set to YES.
SEARCHENGINE_URL = SEARCHENGINE_URL =
# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed # When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed
# search data is written to a file for indexing by an external tool. With the # search data is written to a file for indexing by an external tool. With the
@ -1572,7 +1572,7 @@ SEARCHDATA_FILE = searchdata.xml
# projects and redirect the results back to the right project. # projects and redirect the results back to the right project.
# This tag requires that the tag SEARCHENGINE is set to YES. # This tag requires that the tag SEARCHENGINE is set to YES.
EXTERNAL_SEARCH_ID = EXTERNAL_SEARCH_ID =
# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen # The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen
# projects other than the one defined by this configuration file, but that are # projects other than the one defined by this configuration file, but that are
@ -1582,7 +1582,7 @@ EXTERNAL_SEARCH_ID =
# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... # EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ...
# This tag requires that the tag SEARCHENGINE is set to YES. # This tag requires that the tag SEARCHENGINE is set to YES.
EXTRA_SEARCH_MAPPINGS = EXTRA_SEARCH_MAPPINGS =
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# Configuration options related to the LaTeX output # Configuration options related to the LaTeX output
@ -1643,7 +1643,7 @@ PAPER_TYPE = a4
# If left blank no extra packages will be included. # If left blank no extra packages will be included.
# This tag requires that the tag GENERATE_LATEX is set to YES. # This tag requires that the tag GENERATE_LATEX is set to YES.
EXTRA_PACKAGES = EXTRA_PACKAGES =
# The LATEX_HEADER tag can be used to specify a personal LaTeX header for the # The LATEX_HEADER tag can be used to specify a personal LaTeX header for the
# generated LaTeX document. The header should contain everything until the first # generated LaTeX document. The header should contain everything until the first
@ -1659,7 +1659,7 @@ EXTRA_PACKAGES =
# HTML_HEADER. # HTML_HEADER.
# This tag requires that the tag GENERATE_LATEX is set to YES. # This tag requires that the tag GENERATE_LATEX is set to YES.
LATEX_HEADER = LATEX_HEADER =
# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the # The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the
# generated LaTeX document. The footer should contain everything after the last # generated LaTeX document. The footer should contain everything after the last
@ -1670,7 +1670,7 @@ LATEX_HEADER =
# Note: Only use a user-defined footer if you know what you are doing! # Note: Only use a user-defined footer if you know what you are doing!
# This tag requires that the tag GENERATE_LATEX is set to YES. # This tag requires that the tag GENERATE_LATEX is set to YES.
LATEX_FOOTER = LATEX_FOOTER =
# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or # The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or
# other source files which should be copied to the LATEX_OUTPUT output # other source files which should be copied to the LATEX_OUTPUT output
@ -1678,7 +1678,7 @@ LATEX_FOOTER =
# markers available. # markers available.
# This tag requires that the tag GENERATE_LATEX is set to YES. # This tag requires that the tag GENERATE_LATEX is set to YES.
LATEX_EXTRA_FILES = LATEX_EXTRA_FILES =
# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is
# prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will # prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will
@ -1778,14 +1778,14 @@ RTF_HYPERLINKS = NO
# default style sheet that doxygen normally uses. # default style sheet that doxygen normally uses.
# This tag requires that the tag GENERATE_RTF is set to YES. # This tag requires that the tag GENERATE_RTF is set to YES.
RTF_STYLESHEET_FILE = RTF_STYLESHEET_FILE =
# Set optional variables used in the generation of an RTF document. Syntax is # Set optional variables used in the generation of an RTF document. Syntax is
# similar to doxygen's config file. A template extensions file can be generated # similar to doxygen's config file. A template extensions file can be generated
# using doxygen -e rtf extensionFile. # using doxygen -e rtf extensionFile.
# This tag requires that the tag GENERATE_RTF is set to YES. # This tag requires that the tag GENERATE_RTF is set to YES.
RTF_EXTENSIONS_FILE = RTF_EXTENSIONS_FILE =
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# Configuration options related to the man page output # Configuration options related to the man page output
@ -1820,7 +1820,7 @@ MAN_EXTENSION = .3
# MAN_EXTENSION with the initial . removed. # MAN_EXTENSION with the initial . removed.
# This tag requires that the tag GENERATE_MAN is set to YES. # This tag requires that the tag GENERATE_MAN is set to YES.
MAN_SUBDIR = MAN_SUBDIR =
# If the MAN_LINKS tag is set to YES and doxygen generates man output, then it # If the MAN_LINKS tag is set to YES and doxygen generates man output, then it
# will generate one additional man file for each entity documented in the real # will generate one additional man file for each entity documented in the real
@ -1933,7 +1933,7 @@ PERLMOD_PRETTY = YES
# overwrite each other's variables. # overwrite each other's variables.
# This tag requires that the tag GENERATE_PERLMOD is set to YES. # This tag requires that the tag GENERATE_PERLMOD is set to YES.
PERLMOD_MAKEVAR_PREFIX = PERLMOD_MAKEVAR_PREFIX =
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# Configuration options related to the preprocessor # Configuration options related to the preprocessor
@ -1974,7 +1974,7 @@ SEARCH_INCLUDES = YES
# preprocessor. # preprocessor.
# This tag requires that the tag SEARCH_INCLUDES is set to YES. # This tag requires that the tag SEARCH_INCLUDES is set to YES.
INCLUDE_PATH = INCLUDE_PATH =
# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
# patterns (like *.h and *.hpp) to filter out the header-files in the # patterns (like *.h and *.hpp) to filter out the header-files in the
@ -1982,7 +1982,7 @@ INCLUDE_PATH =
# used. # used.
# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. # This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
INCLUDE_FILE_PATTERNS = INCLUDE_FILE_PATTERNS =
# The PREDEFINED tag can be used to specify one or more macro names that are # The PREDEFINED tag can be used to specify one or more macro names that are
# defined before the preprocessor is started (similar to the -D option of e.g. # defined before the preprocessor is started (similar to the -D option of e.g.
@ -1992,7 +1992,7 @@ INCLUDE_FILE_PATTERNS =
# recursively expanded use the := operator instead of the = operator. # recursively expanded use the := operator instead of the = operator.
# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. # This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
PREDEFINED = PREDEFINED =
# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this
# tag can be used to specify a list of macro names that should be expanded. The # tag can be used to specify a list of macro names that should be expanded. The
@ -2001,7 +2001,7 @@ PREDEFINED =
# definition found in the source code. # definition found in the source code.
# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. # This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
EXPAND_AS_DEFINED = EXPAND_AS_DEFINED =
# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will # If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will
# remove all references to function-like macros that are alone on a line, have # remove all references to function-like macros that are alone on a line, have
@ -2030,13 +2030,13 @@ SKIP_FUNCTION_MACROS = YES
# the path). If a tag file is not located in the directory in which doxygen is # the path). If a tag file is not located in the directory in which doxygen is
# run, you must also specify the path to the tagfile here. # run, you must also specify the path to the tagfile here.
TAGFILES = TAGFILES =
# When a file name is specified after GENERATE_TAGFILE, doxygen will create a # When a file name is specified after GENERATE_TAGFILE, doxygen will create a
# tag file that is based on the input files it reads. See section "Linking to # tag file that is based on the input files it reads. See section "Linking to
# external documentation" for more information about the usage of tag files. # external documentation" for more information about the usage of tag files.
GENERATE_TAGFILE = GENERATE_TAGFILE =
# If the ALLEXTERNALS tag is set to YES all external class will be listed in the # If the ALLEXTERNALS tag is set to YES all external class will be listed in the
# class index. If set to NO only the inherited external classes will be listed. # class index. If set to NO only the inherited external classes will be listed.
@ -2084,14 +2084,14 @@ CLASS_DIAGRAMS = YES
# the mscgen tool resides. If left empty the tool is assumed to be found in the # the mscgen tool resides. If left empty the tool is assumed to be found in the
# default search path. # default search path.
MSCGEN_PATH = MSCGEN_PATH =
# You can include diagrams made with dia in doxygen documentation. Doxygen will # You can include diagrams made with dia in doxygen documentation. Doxygen will
# then run dia to produce the diagram and insert it in the documentation. The # then run dia to produce the diagram and insert it in the documentation. The
# DIA_PATH tag allows you to specify the directory where the dia binary resides. # DIA_PATH tag allows you to specify the directory where the dia binary resides.
# If left empty dia is assumed to be found in the default search path. # If left empty dia is assumed to be found in the default search path.
DIA_PATH = DIA_PATH =
# If set to YES, the inheritance and collaboration graphs will hide inheritance # If set to YES, the inheritance and collaboration graphs will hide inheritance
# and usage relations if the target is undocumented or is not a class. # and usage relations if the target is undocumented or is not a class.
@ -2140,7 +2140,7 @@ DOT_FONTSIZE = 10
# the path where dot can find it using this tag. # the path where dot can find it using this tag.
# This tag requires that the tag HAVE_DOT is set to YES. # This tag requires that the tag HAVE_DOT is set to YES.
DOT_FONTPATH = DOT_FONTPATH =
# If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for # If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for
# each documented class showing the direct and indirect inheritance relations. # each documented class showing the direct and indirect inheritance relations.
@ -2278,26 +2278,26 @@ INTERACTIVE_SVG = NO
# found. If left blank, it is assumed the dot tool can be found in the path. # found. If left blank, it is assumed the dot tool can be found in the path.
# This tag requires that the tag HAVE_DOT is set to YES. # This tag requires that the tag HAVE_DOT is set to YES.
DOT_PATH = DOT_PATH =
# The DOTFILE_DIRS tag can be used to specify one or more directories that # The DOTFILE_DIRS tag can be used to specify one or more directories that
# contain dot files that are included in the documentation (see the \dotfile # contain dot files that are included in the documentation (see the \dotfile
# command). # command).
# This tag requires that the tag HAVE_DOT is set to YES. # This tag requires that the tag HAVE_DOT is set to YES.
DOTFILE_DIRS = DOTFILE_DIRS =
# The MSCFILE_DIRS tag can be used to specify one or more directories that # The MSCFILE_DIRS tag can be used to specify one or more directories that
# contain msc files that are included in the documentation (see the \mscfile # contain msc files that are included in the documentation (see the \mscfile
# command). # command).
MSCFILE_DIRS = MSCFILE_DIRS =
# The DIAFILE_DIRS tag can be used to specify one or more directories that # The DIAFILE_DIRS tag can be used to specify one or more directories that
# contain dia files that are included in the documentation (see the \diafile # contain dia files that are included in the documentation (see the \diafile
# command). # command).
DIAFILE_DIRS = DIAFILE_DIRS =
# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the # When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the
# path where java can find the plantuml.jar file. If left blank, it is assumed # path where java can find the plantuml.jar file. If left blank, it is assumed
@ -2306,7 +2306,7 @@ DIAFILE_DIRS =
# will not generate output for the diagram. # will not generate output for the diagram.
# This tag requires that the tag HAVE_DOT is set to YES. # This tag requires that the tag HAVE_DOT is set to YES.
PLANTUML_JAR_PATH = PLANTUML_JAR_PATH =
# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes # The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes
# that will be shown in the graph. If the number of nodes in a graph becomes # that will be shown in the graph. If the number of nodes in a graph becomes

View file

@ -28,5 +28,5 @@ If you like, you can [donate by PayPal](https://www.paypal.com/cgi-bin/webscr?cm
* Infrastructure setup * Infrastructure setup
* Eventually 3D displays to get proper 3D output working * Eventually 3D displays to get proper 3D output working
* ... etc ... * ... etc ...
We also more than gladly accept used 3DS consoles, preferrably ones with firmware 4.5 or lower! If you would like to give yours away, don't hesitate to join our IRC channel #citra on [Freenode](http://webchat.freenode.net/?channels=citra) and talk to neobrain or bunnei. Mind you, IRC is slow-paced, so it might be a while until people reply. If you're in a hurry you can just leave contact details in the channel or via private message and we'll get back to you. We also more than gladly accept used 3DS consoles, preferrably ones with firmware 4.5 or lower! If you would like to give yours away, don't hesitate to join our IRC channel #citra on [Freenode](http://webchat.freenode.net/?channels=citra) and talk to neobrain or bunnei. Mind you, IRC is slow-paced, so it might be a while until people reply. If you're in a hurry you can just leave contact details in the channel or via private message and we'll get back to you.

View file

@ -35,11 +35,11 @@ after_build:
$BUILD_NAME = "citra-${GITDATE}-${GITREV}-windows-amd64.7z" -replace " ","" $BUILD_NAME = "citra-${GITDATE}-${GITREV}-windows-amd64.7z" -replace " ",""
# Zip up the build folder # Zip up the build folder
7z a $BUILD_NAME .\build\bin\release\* 7z a $BUILD_NAME .\build\bin\release\*
# Download winscp # Download winscp
Invoke-WebRequest "http://hivelocity.dl.sourceforge.net/project/winscp/WinSCP/5.7/winscp570.zip" -OutFile "winscp570.zip" Invoke-WebRequest "http://hivelocity.dl.sourceforge.net/project/winscp/WinSCP/5.7/winscp570.zip" -OutFile "winscp570.zip"
7z e -y winscp570.zip 7z e -y winscp570.zip
# Upload to server # Upload to server
.\WinSCP.com /command ` .\WinSCP.com /command `
"option batch abort" ` "option batch abort" `

Binary file not shown.

View file

@ -89,15 +89,15 @@ if (Qt5_FOUND AND MSVC)
) )
set(DLL_DEST "${CMAKE_BINARY_DIR}/bin/$<CONFIG>/") set(DLL_DEST "${CMAKE_BINARY_DIR}/bin/$<CONFIG>/")
set(PLATFORMS ${DLL_DEST}platforms/) set(PLATFORMS ${DLL_DEST}platforms/)
# windows commandline expects the / to be \ so switch them # windows commandline expects the / to be \ so switch them
string(REPLACE "/" "\\" Qt5_DLL_DIR ${Qt5_DLL_DIR}) string(REPLACE "/" "\\" Qt5_DLL_DIR ${Qt5_DLL_DIR})
string(REPLACE "/" "\\" Qt5_PLATFORMS_DIR ${Qt5_PLATFORMS_DIR}) string(REPLACE "/" "\\" Qt5_PLATFORMS_DIR ${Qt5_PLATFORMS_DIR})
string(REPLACE "/" "\\" DLL_DEST ${DLL_DEST}) string(REPLACE "/" "\\" DLL_DEST ${DLL_DEST})
string(REPLACE "/" "\\" PLATFORMS ${PLATFORMS}) string(REPLACE "/" "\\" PLATFORMS ${PLATFORMS})
# /NJH /NJS /NDL /NFL /NC /NS /NP - Silence any output # /NJH /NJS /NDL /NFL /NC /NS /NP - Silence any output
# cmake adds an extra check for command success which doesn't work too well with robocopy # cmake adds an extra check for command success which doesn't work too well with robocopy
# so trick it into thinking the command was successful with the || cmd /c "exit /b 0" # so trick it into thinking the command was successful with the || cmd /c "exit /b 0"
add_custom_command(TARGET citra-qt POST_BUILD add_custom_command(TARGET citra-qt POST_BUILD
COMMAND robocopy ${Qt5_DLL_DIR} ${DLL_DEST} ${Qt5_DLLS} /NJH /NJS /NDL /NFL /NC /NS /NP || cmd /c "exit /b 0" COMMAND robocopy ${Qt5_DLL_DIR} ${DLL_DEST} ${Qt5_DLLS} /NJH /NJS /NDL /NFL /NC /NS /NP || cmd /c "exit /b 0"

View file

@ -57,7 +57,7 @@ void EmuThread::run() {
Core::SingleStep(); Core::SingleStep();
emit DebugModeEntered(); emit DebugModeEntered();
yieldCurrentThread(); yieldCurrentThread();
was_active = false; was_active = false;
} else { } else {
std::unique_lock<std::mutex> lock(running_mutex); std::unique_lock<std::mutex> lock(running_mutex);

View file

@ -80,7 +80,7 @@ signals:
* @warning When connecting to this signal from other threads, make sure to specify either Qt::QueuedConnection (invoke slot within the destination object's message thread) or even Qt::BlockingQueuedConnection (additionally block source thread until slot returns) * @warning When connecting to this signal from other threads, make sure to specify either Qt::QueuedConnection (invoke slot within the destination object's message thread) or even Qt::BlockingQueuedConnection (additionally block source thread until slot returns)
*/ */
void DebugModeEntered(); void DebugModeEntered();
/** /**
* Emitted right before the CPU continues execution * Emitted right before the CPU continues execution
* *

View file

@ -39,7 +39,7 @@ void CallstackWidget::OnDebugModeEntered()
{ {
ret_addr = Memory::Read32(addr); ret_addr = Memory::Read32(addr);
call_addr = ret_addr - 4; //get call address??? call_addr = ret_addr - 4; //get call address???
if (Memory::GetPointer(call_addr) == nullptr) if (Memory::GetPointer(call_addr) == nullptr)
break; break;

View file

@ -127,7 +127,7 @@ GMainWindow::GMainWindow() : emu_thread(nullptr)
ui.action_Use_Hardware_Renderer->setChecked(Settings::values.use_hw_renderer); ui.action_Use_Hardware_Renderer->setChecked(Settings::values.use_hw_renderer);
SetHardwareRendererEnabled(ui.action_Use_Hardware_Renderer->isChecked()); SetHardwareRendererEnabled(ui.action_Use_Hardware_Renderer->isChecked());
ui.action_Single_Window_Mode->setChecked(settings.value("singleWindowMode", true).toBool()); ui.action_Single_Window_Mode->setChecked(settings.value("singleWindowMode", true).toBool());
ToggleWindowMode(); ToggleWindowMode();

View file

@ -32,7 +32,7 @@ std::tuple<unsigned,unsigned> EmuWindow::ClipToTouchScreen(unsigned new_x, unsig
new_x = std::max(new_x, framebuffer_layout.bottom_screen.left); new_x = std::max(new_x, framebuffer_layout.bottom_screen.left);
new_x = std::min(new_x, framebuffer_layout.bottom_screen.right-1); new_x = std::min(new_x, framebuffer_layout.bottom_screen.right-1);
new_y = std::max(new_y, framebuffer_layout.bottom_screen.top); new_y = std::max(new_y, framebuffer_layout.bottom_screen.top);
new_y = std::min(new_y, framebuffer_layout.bottom_screen.bottom-1); new_y = std::min(new_y, framebuffer_layout.bottom_screen.bottom-1);

View file

@ -16,7 +16,7 @@
#include <io.h> #include <io.h>
#include <direct.h> // getcwd #include <direct.h> // getcwd
#include <tchar.h> #include <tchar.h>
// 64 bit offsets for windows // 64 bit offsets for windows
#define fseeko _fseeki64 #define fseeko _fseeki64
#define ftello _ftelli64 #define ftello _ftelli64

View file

@ -135,7 +135,7 @@ template <>
inline void swap<8>(u8* data) { inline void swap<8>(u8* data) {
*reinterpret_cast<u64*>(data) = swap64(data); *reinterpret_cast<u64*>(data) = swap64(data);
} }
} // Namespace Common } // Namespace Common

View file

@ -813,7 +813,7 @@ Opcode ARM_Disasm::Decode11(uint32_t insn) {
// SWI // SWI
return OP_SWI; return OP_SWI;
} }
uint8_t bit4 = (insn >> 4) & 0x1; uint8_t bit4 = (insn >> 4) & 0x1;
uint8_t cpnum = (insn >> 8) & 0xf; uint8_t cpnum = (insn >> 8) & 0xf;

View file

@ -134,7 +134,7 @@ static unsigned int DPO(Immediate)(ARMul_State* cpu, unsigned int sht_oper) {
unsigned int immed_8 = BITS(sht_oper, 0, 7); unsigned int immed_8 = BITS(sht_oper, 0, 7);
unsigned int rotate_imm = BITS(sht_oper, 8, 11); unsigned int rotate_imm = BITS(sht_oper, 8, 11);
unsigned int shifter_operand = ROTATE_RIGHT_32(immed_8, rotate_imm * 2); unsigned int shifter_operand = ROTATE_RIGHT_32(immed_8, rotate_imm * 2);
if (rotate_imm == 0) if (rotate_imm == 0)
cpu->shifter_carry_out = cpu->CFlag; cpu->shifter_carry_out = cpu->CFlag;
else else
cpu->shifter_carry_out = BIT(shifter_operand, 31); cpu->shifter_carry_out = BIT(shifter_operand, 31);
@ -521,7 +521,7 @@ static void MLnS(ImmediateOffset)(ARMul_State* cpu, unsigned int inst, unsigned
addr = CHECK_READ_REG15_WA(cpu, Rn) + offset_8; addr = CHECK_READ_REG15_WA(cpu, Rn) + offset_8;
else else
addr = CHECK_READ_REG15_WA(cpu, Rn) - offset_8; addr = CHECK_READ_REG15_WA(cpu, Rn) - offset_8;
virt_addr = addr; virt_addr = addr;
} }
@ -550,7 +550,7 @@ static void MLnS(ImmediatePreIndexed)(ARMul_State* cpu, unsigned int inst, unsig
if (U_BIT) if (U_BIT)
addr = rn + offset_8; addr = rn + offset_8;
else else
addr = rn - offset_8; addr = rn - offset_8;
virt_addr = addr; virt_addr = addr;
@ -1306,8 +1306,8 @@ static ARM_INST_PTR INTERPRETER_TRANSLATE(and)(unsigned int inst, int index)
inst_cream->Rd = BITS(inst, 12, 15); inst_cream->Rd = BITS(inst, 12, 15);
inst_cream->shifter_operand = BITS(inst, 0, 11); inst_cream->shifter_operand = BITS(inst, 0, 11);
inst_cream->shtop_func = get_shtop(inst); inst_cream->shtop_func = get_shtop(inst);
if (inst_cream->Rd == 15) if (inst_cream->Rd == 15)
inst_base->br = INDIRECT_BRANCH; inst_base->br = INDIRECT_BRANCH;
return inst_base; return inst_base;
@ -1350,7 +1350,7 @@ static ARM_INST_PTR INTERPRETER_TRANSLATE(bic)(unsigned int inst, int index)
inst_cream->shifter_operand = BITS(inst, 0, 11); inst_cream->shifter_operand = BITS(inst, 0, 11);
inst_cream->shtop_func = get_shtop(inst); inst_cream->shtop_func = get_shtop(inst);
if (inst_cream->Rd == 15) if (inst_cream->Rd == 15)
inst_base->br = INDIRECT_BRANCH; inst_base->br = INDIRECT_BRANCH;
return inst_base; return inst_base;
} }
@ -3269,7 +3269,7 @@ static ARM_INST_PTR INTERPRETER_TRANSLATE(yield)(unsigned int inst, int index)
#define VFP_INTERPRETER_STRUCT #define VFP_INTERPRETER_STRUCT
#include "core/arm/skyeye_common/vfp/vfpinstr.cpp" #include "core/arm/skyeye_common/vfp/vfpinstr.cpp"
#undef VFP_INTERPRETER_STRUCT #undef VFP_INTERPRETER_STRUCT
#define VFP_INTERPRETER_TRANS #define VFP_INTERPRETER_TRANS
#include "core/arm/skyeye_common/vfp/vfpinstr.cpp" #include "core/arm/skyeye_common/vfp/vfpinstr.cpp"
#undef VFP_INTERPRETER_TRANS #undef VFP_INTERPRETER_TRANS
@ -3478,9 +3478,9 @@ const transop_fp_t arm_instruction_trans[] = {
INTERPRETER_TRANSLATE(bbl), INTERPRETER_TRANSLATE(bbl),
// All the thumb instructions should be placed the end of table // All the thumb instructions should be placed the end of table
INTERPRETER_TRANSLATE(b_2_thumb), INTERPRETER_TRANSLATE(b_2_thumb),
INTERPRETER_TRANSLATE(b_cond_thumb), INTERPRETER_TRANSLATE(b_cond_thumb),
INTERPRETER_TRANSLATE(bl_1_thumb), INTERPRETER_TRANSLATE(bl_1_thumb),
INTERPRETER_TRANSLATE(bl_2_thumb), INTERPRETER_TRANSLATE(bl_2_thumb),
INTERPRETER_TRANSLATE(blx_1_thumb) INTERPRETER_TRANSLATE(blx_1_thumb)
}; };
@ -4338,7 +4338,7 @@ unsigned InterpreterMainLoop(ARMul_State* cpu) {
} }
} }
if (BIT(inst, 13)) { if (BIT(inst, 13)) {
if (cpu->Mode == USER32MODE) if (cpu->Mode == USER32MODE)
cpu->Reg[13] = ReadMemory32(cpu, addr); cpu->Reg[13] = ReadMemory32(cpu, addr);
else else
cpu->Reg_usr[0] = ReadMemory32(cpu, addr); cpu->Reg_usr[0] = ReadMemory32(cpu, addr);
@ -4346,7 +4346,7 @@ unsigned InterpreterMainLoop(ARMul_State* cpu) {
addr += 4; addr += 4;
} }
if (BIT(inst, 14)) { if (BIT(inst, 14)) {
if (cpu->Mode == USER32MODE) if (cpu->Mode == USER32MODE)
cpu->Reg[14] = ReadMemory32(cpu, addr); cpu->Reg[14] = ReadMemory32(cpu, addr);
else else
cpu->Reg_usr[1] = ReadMemory32(cpu, addr); cpu->Reg_usr[1] = ReadMemory32(cpu, addr);
@ -5148,7 +5148,7 @@ unsigned InterpreterMainLoop(ARMul_State* cpu) {
REV16_INST: REV16_INST:
REVSH_INST: REVSH_INST:
{ {
if (inst_base->cond == 0xE || CondPassed(cpu, inst_base->cond)) { if (inst_base->cond == 0xE || CondPassed(cpu, inst_base->cond)) {
rev_inst* const inst_cream = (rev_inst*)inst_base->component; rev_inst* const inst_cream = (rev_inst*)inst_base->component;
@ -5721,7 +5721,7 @@ unsigned InterpreterMainLoop(ARMul_State* cpu) {
if (do_swap) if (do_swap)
rm_val = (((rm_val & 0xFFFF) << 16) | (rm_val >> 16)); rm_val = (((rm_val & 0xFFFF) << 16) | (rm_val >> 16));
const s32 product1 = (s16)(rn_val & 0xFFFF) * (s16)(rm_val & 0xFFFF); const s32 product1 = (s16)(rn_val & 0xFFFF) * (s16)(rm_val & 0xFFFF);
const s32 product2 = (s16)((rn_val >> 16) & 0xFFFF) * (s16)((rm_val >> 16) & 0xFFFF); const s32 product2 = (s16)((rn_val >> 16) & 0xFFFF) * (s16)((rm_val >> 16) & 0xFFFF);
s64 result; s64 result;
@ -6583,7 +6583,7 @@ unsigned InterpreterMainLoop(ARMul_State* cpu) {
{ {
u32 lo_val = 0; u32 lo_val = 0;
u32 hi_val = 0; u32 hi_val = 0;
// UHADD16 // UHADD16
if (op2 == 0x00) { if (op2 == 0x00) {
lo_val = (rn_val & 0xFFFF) + (rm_val & 0xFFFF); lo_val = (rn_val & 0xFFFF) + (rm_val & 0xFFFF);
@ -6772,7 +6772,7 @@ unsigned InterpreterMainLoop(ARMul_State* cpu) {
u16 lo_val = 0; u16 lo_val = 0;
u16 hi_val = 0; u16 hi_val = 0;
// UQADD16 // UQADD16
if (op2 == 0x00) { if (op2 == 0x00) {
lo_val = ARMul_UnsignedSaturatedAdd16(rn_val & 0xFFFF, rm_val & 0xFFFF); lo_val = ARMul_UnsignedSaturatedAdd16(rn_val & 0xFFFF, rm_val & 0xFFFF);

View file

@ -184,7 +184,7 @@ tdstate thumb_translate(u32 addr, u32 instr, u32* ainstr, u32* inst_size) {
case 9: // LDR Rd,[PC,#imm8] case 9: // LDR Rd,[PC,#imm8]
*ainstr = 0xE59F0000 // base *ainstr = 0xE59F0000 // base
| ((tinstr & 0x0700) << (12 - 8)) // Rd | ((tinstr & 0x0700) << (12 - 8)) // Rd
|((tinstr & 0x00FF) << (2 - 0)); // off8 |((tinstr & 0x00FF) << (2 - 0)); // off8
break; break;
case 10: case 10:

View file

@ -628,7 +628,7 @@ void WriteCP15Register(ARMul_State* cpu, u32 value, u32 crn, u32 opcode_1, u32 c
cpu->CP15[CP15_DATA_SYNC_BARRIER] = value; cpu->CP15[CP15_DATA_SYNC_BARRIER] = value;
else if (opcode_2 == 5) else if (opcode_2 == 5)
cpu->CP15[CP15_DATA_MEMORY_BARRIER] = value; cpu->CP15[CP15_DATA_MEMORY_BARRIER] = value;
} }
else if (crn == 13 && opcode_1 == 0 && crm == 0 && opcode_2 == 2) else if (crn == 13 && opcode_1 == 0 && crm == 0 && opcode_2 == 2)
{ {

View file

@ -1,16 +1,16 @@
/* armdefs.h -- ARMulator common definitions: ARM6 Instruction Emulator. /* armdefs.h -- ARMulator common definitions: ARM6 Instruction Emulator.
Copyright (C) 1994 Advanced RISC Machines Ltd. Copyright (C) 1994 Advanced RISC Machines Ltd.
This program is free software; you can redistribute it and/or modify This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or the Free Software Foundation; either version 2 of the License, or
(at your option) any later version. (at your option) any later version.
This program is distributed in the hope that it will be useful, This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */

View file

@ -18,10 +18,10 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/ */
/* /*
* The following code is derivative from Linux Android kernel vfp * The following code is derivative from Linux Android kernel vfp
* floating point support. * floating point support.
* *
* Copyright (C) 2004 ARM Limited. * Copyright (C) 2004 ARM Limited.
* Written by Deep Blue Solutions Limited. * Written by Deep Blue Solutions Limited.
* *

View file

@ -549,7 +549,7 @@ std::string GetScheduledEventsSummary() {
const char* name = event_types[event->type].name; const char* name = event_types[event->type].name;
if (!name) if (!name)
name = "[unknown]"; name = "[unknown]";
text += Common::StringFromFormat("%s : %i %08x%08x\n", name, (int)event->time, text += Common::StringFromFormat("%s : %i %08x%08x\n", name, (int)event->time,
(u32)(event->userdata >> 32), (u32)(event->userdata)); (u32)(event->userdata >> 32), (u32)(event->userdata));
event = event->next; event = event->next;
} }

View file

@ -87,7 +87,7 @@ void UnregisterAllEvents();
/// userdata MAY NOT CONTAIN POINTERS. userdata might get written and reloaded from disk, /// userdata MAY NOT CONTAIN POINTERS. userdata might get written and reloaded from disk,
/// when we implement state saves. /// when we implement state saves.
/** /**
* Schedules an event to run after the specified number of cycles, * Schedules an event to run after the specified number of cycles,
* with an optional parameter to be passed to the callback handler. * with an optional parameter to be passed to the callback handler.
* This must be run ONLY from within the cpu thread. * This must be run ONLY from within the cpu thread.
* @param cycles_into_future The number of cycles after which this event will be fired * @param cycles_into_future The number of cycles after which this event will be fired

View file

@ -30,8 +30,8 @@ std::string GetExtSaveDataPath(const std::string& mount_point, const Path& path)
std::string GetExtDataContainerPath(const std::string& mount_point, bool shared) { std::string GetExtDataContainerPath(const std::string& mount_point, bool shared) {
if (shared) if (shared)
return Common::StringFromFormat("%sdata/%s/extdata/", mount_point.c_str(), SYSTEM_ID.c_str()); return Common::StringFromFormat("%sdata/%s/extdata/", mount_point.c_str(), SYSTEM_ID.c_str());
return Common::StringFromFormat("%sNintendo 3DS/%s/%s/extdata/", mount_point.c_str(), return Common::StringFromFormat("%sNintendo 3DS/%s/%s/extdata/", mount_point.c_str(),
SYSTEM_ID.c_str(), SDCARD_ID.c_str()); SYSTEM_ID.c_str(), SDCARD_ID.c_str());
} }

View file

@ -35,14 +35,14 @@ public:
private: private:
/** /**
* This holds the full directory path for this archive, it is only set after a successful call * This holds the full directory path for this archive, it is only set after a successful call
* to Open, this is formed as <base extsavedatapath>/<type>/<high>/<low>. * to Open, this is formed as <base extsavedatapath>/<type>/<high>/<low>.
* See GetExtSaveDataPath for the code that extracts this data from an archive path. * See GetExtSaveDataPath for the code that extracts this data from an archive path.
*/ */
std::string mount_point; std::string mount_point;
}; };
/** /**
* Constructs a path to the concrete ExtData archive in the host filesystem based on the * Constructs a path to the concrete ExtData archive in the host filesystem based on the
* input Path and base mount point. * input Path and base mount point.
* @param mount_point The base mount point of the ExtSaveData archives. * @param mount_point The base mount point of the ExtSaveData archives.
* @param path The path that identifies the requested concrete ExtSaveData archive. * @param path The path that identifies the requested concrete ExtSaveData archive.

View file

@ -21,7 +21,7 @@
namespace FileSys { namespace FileSys {
static std::string GetSaveDataContainerPath(const std::string& sdmc_directory) { static std::string GetSaveDataContainerPath(const std::string& sdmc_directory) {
return Common::StringFromFormat("%sNintendo 3DS/%s/%s/title/", sdmc_directory.c_str(), return Common::StringFromFormat("%sNintendo 3DS/%s/%s/title/", sdmc_directory.c_str(),
SYSTEM_ID.c_str(), SDCARD_ID.c_str()); SYSTEM_ID.c_str(), SDCARD_ID.c_str());
} }

View file

@ -81,13 +81,13 @@ public:
s32 max_timers = 0; s32 max_timers = 0;
s32 max_shared_mems = 0; s32 max_shared_mems = 0;
s32 max_address_arbiters = 0; s32 max_address_arbiters = 0;
/// Max CPU time that the processes in this category can utilize /// Max CPU time that the processes in this category can utilize
s32 max_cpu_time = 0; s32 max_cpu_time = 0;
// TODO(Subv): Increment these in their respective Kernel::T::Create functions, keeping in mind that // TODO(Subv): Increment these in their respective Kernel::T::Create functions, keeping in mind that
// APPLICATION resource limits should not be affected by the objects created by service modules. // APPLICATION resource limits should not be affected by the objects created by service modules.
// Currently we have no way of distinguishing if a Create was called by the running application, // Currently we have no way of distinguishing if a Create was called by the running application,
// or by a service module. Approach this once we have separated the service modules into their own processes // or by a service module. Approach this once we have separated the service modules into their own processes
/// Current memory that the processes in this category are using /// Current memory that the processes in this category are using

View file

@ -42,7 +42,7 @@ void Semaphore::Acquire() {
ResultVal<s32> Semaphore::Release(s32 release_count) { ResultVal<s32> Semaphore::Release(s32 release_count) {
if (max_count - available_count < release_count) if (max_count - available_count < release_count)
return ResultCode(ErrorDescription::OutOfRange, ErrorModule::Kernel, return ResultCode(ErrorDescription::OutOfRange, ErrorModule::Kernel,
ErrorSummary::InvalidArgument, ErrorLevel::Permanent); ErrorSummary::InvalidArgument, ErrorLevel::Permanent);
s32 previous_count = available_count; s32 previous_count = available_count;

View file

@ -100,7 +100,7 @@ void Thread::Stop() {
} }
status = THREADSTATUS_DEAD; status = THREADSTATUS_DEAD;
WakeupAllWaitingThreads(); WakeupAllWaitingThreads();
// Clean up any dangling references in objects that this thread was waiting for // Clean up any dangling references in objects that this thread was waiting for
@ -169,7 +169,7 @@ static void PriorityBoostStarvedThreads() {
} }
} }
/** /**
* Switches the CPU's active thread context to that of the specified thread * Switches the CPU's active thread context to that of the specified thread
* @param new_thread The thread to switch to * @param new_thread The thread to switch to
*/ */
@ -353,7 +353,7 @@ void Thread::ResumeFromWait() {
GetObjectId()); GetObjectId());
return; return;
} }
ready_queue.push_back(current_priority, this); ready_queue.push_back(current_priority, this);
status = THREADSTATUS_READY; status = THREADSTATUS_READY;
} }
@ -504,7 +504,7 @@ void Reschedule() {
} else if (next) { } else if (next) {
LOG_TRACE(Kernel, "context switch idle -> %u", next->GetObjectId()); LOG_TRACE(Kernel, "context switch idle -> %u", next->GetObjectId());
} }
SwitchContext(next); SwitchContext(next);
} }

View file

@ -94,7 +94,7 @@ public:
* @return The thread's ID * @return The thread's ID
*/ */
u32 GetThreadId() const { return thread_id; } u32 GetThreadId() const { return thread_id; }
/** /**
* Release an acquired wait object * Release an acquired wait object
* @param wait_object WaitObject to release * @param wait_object WaitObject to release

View file

@ -88,7 +88,7 @@ static void TimerCallback(u64 timer_handle, int cycles_late) {
if (timer->interval_delay != 0) { if (timer->interval_delay != 0) {
// Reschedule the timer with the interval delay // Reschedule the timer with the interval delay
u64 interval_microseconds = timer->interval_delay / 1000; u64 interval_microseconds = timer->interval_delay / 1000;
CoreTiming::ScheduleEvent(usToCycles(interval_microseconds) - cycles_late, CoreTiming::ScheduleEvent(usToCycles(interval_microseconds) - cycles_late,
timer_callback_event_type, timer_handle); timer_callback_event_type, timer_handle);
} }
} }

View file

@ -151,7 +151,7 @@ void SendParameter(Service::Interface* self) {
u32 handle = cmd_buff[6]; u32 handle = cmd_buff[6];
u32 size = cmd_buff[7]; u32 size = cmd_buff[7];
u32 in_param_buffer_ptr = cmd_buff[8]; u32 in_param_buffer_ptr = cmd_buff[8];
cmd_buff[1] = RESULT_SUCCESS.raw; // No error cmd_buff[1] = RESULT_SUCCESS.raw; // No error
LOG_WARNING(Service_APT, "(STUBBED) called src_app_id=0x%08X, dst_app_id=0x%08X, signal_type=0x%08X," LOG_WARNING(Service_APT, "(STUBBED) called src_app_id=0x%08X, dst_app_id=0x%08X, signal_type=0x%08X,"
@ -283,7 +283,7 @@ void Init() {
AddService(new APT_A_Interface); AddService(new APT_A_Interface);
AddService(new APT_S_Interface); AddService(new APT_S_Interface);
AddService(new APT_U_Interface); AddService(new APT_U_Interface);
// Load the shared system font (if available). // Load the shared system font (if available).
// The expected format is a decrypted, uncompressed BCFNT file with the 0x80 byte header // The expected format is a decrypted, uncompressed BCFNT file with the 0x80 byte header
// generated by the APT:U service. The best way to get is by dumping it from RAM. We've provided // generated by the APT:U service. The best way to get is by dumping it from RAM. We've provided

View file

@ -63,7 +63,7 @@ void Initialize(Service::Interface* self);
* 4 : Handle to shared font memory * 4 : Handle to shared font memory
*/ */
void GetSharedFont(Service::Interface* self); void GetSharedFont(Service::Interface* self);
/** /**
* APT::NotifyToWait service function * APT::NotifyToWait service function
* Inputs: * Inputs:
@ -88,7 +88,7 @@ void Enable(Service::Interface* self);
* 4 : Home Menu AppId * 4 : Home Menu AppId
* 5 : AppID of currently active app * 5 : AppID of currently active app
*/ */
void GetAppletManInfo(Service::Interface* self); void GetAppletManInfo(Service::Interface* self);
/** /**
* APT::IsRegistered service function. This returns whether the specified AppID is registered with NS yet. * APT::IsRegistered service function. This returns whether the specified AppID is registered with NS yet.
@ -100,14 +100,14 @@ void GetAppletManInfo(Service::Interface* self);
* Outputs: * Outputs:
* 0 : Return header * 0 : Return header
* 1 : Result of function, 0 on success, otherwise error code * 1 : Result of function, 0 on success, otherwise error code
* 2 : Output, 0 = not registered, 1 = registered. * 2 : Output, 0 = not registered, 1 = registered.
*/ */
void IsRegistered(Service::Interface* self); void IsRegistered(Service::Interface* self);
void InquireNotification(Service::Interface* self); void InquireNotification(Service::Interface* self);
/** /**
* APT::SendParameter service function. This sets the parameter data state. * APT::SendParameter service function. This sets the parameter data state.
* Inputs: * Inputs:
* 1 : Source AppID * 1 : Source AppID
* 2 : Destination AppID * 2 : Destination AppID

View file

@ -14,7 +14,7 @@ namespace BOSS_P {
class Interface : public Service::Interface { class Interface : public Service::Interface {
public: public:
Interface(); Interface();
std::string GetPortName() const override { std::string GetPortName() const override {
return "boss:P"; return "boss:P";
} }

View file

@ -14,7 +14,7 @@ namespace BOSS_U {
class Interface : public Service::Interface { class Interface : public Service::Interface {
public: public:
Interface(); Interface();
std::string GetPortName() const override { std::string GetPortName() const override {
return "boss:U"; return "boss:U";
} }

View file

@ -19,5 +19,5 @@ namespace CAM_U {
Interface::Interface() { Interface::Interface() {
//Register(FunctionTable); //Register(FunctionTable);
} }
} // namespace } // namespace

View file

@ -315,11 +315,11 @@ void Init() {
AddService(new CFG_I_Interface); AddService(new CFG_I_Interface);
AddService(new CFG_S_Interface); AddService(new CFG_S_Interface);
AddService(new CFG_U_Interface); AddService(new CFG_U_Interface);
// Open the SystemSaveData archive 0x00010017 // Open the SystemSaveData archive 0x00010017
FileSys::Path archive_path(cfg_system_savedata_id); FileSys::Path archive_path(cfg_system_savedata_id);
auto archive_result = Service::FS::OpenArchive(Service::FS::ArchiveIdCode::SystemSaveData, archive_path); auto archive_result = Service::FS::OpenArchive(Service::FS::ArchiveIdCode::SystemSaveData, archive_path);
// If the archive didn't exist, create the files inside // If the archive didn't exist, create the files inside
if (archive_result.Code().description == ErrorDescription::FS_NotFormatted) { if (archive_result.Code().description == ErrorDescription::FS_NotFormatted) {
// Format the archive to create the directories // Format the archive to create the directories

View file

@ -254,7 +254,7 @@ ResultVal<ArchiveHandle> OpenArchive(ArchiveIdCode id_code, FileSys::Path& archi
CASCADE_RESULT(std::unique_ptr<ArchiveBackend> res, itr->second->Open(archive_path)); CASCADE_RESULT(std::unique_ptr<ArchiveBackend> res, itr->second->Open(archive_path));
// This should never even happen in the first place with 64-bit handles, // This should never even happen in the first place with 64-bit handles,
while (handle_map.count(next_handle) != 0) { while (handle_map.count(next_handle) != 0) {
++next_handle; ++next_handle;
} }
@ -488,7 +488,7 @@ void ArchiveInit() {
RegisterArchiveType(std::move(sdmc_factory), ArchiveIdCode::SDMC); RegisterArchiveType(std::move(sdmc_factory), ArchiveIdCode::SDMC);
else else
LOG_ERROR(Service_FS, "Can't instantiate SDMC archive with path %s", sdmc_directory.c_str()); LOG_ERROR(Service_FS, "Can't instantiate SDMC archive with path %s", sdmc_directory.c_str());
// Create the SaveData archive // Create the SaveData archive
auto savedata_factory = Common::make_unique<FileSys::ArchiveFactory_SaveData>(sdmc_directory); auto savedata_factory = Common::make_unique<FileSys::ArchiveFactory_SaveData>(sdmc_directory);
RegisterArchiveType(std::move(savedata_factory), ArchiveIdCode::SaveData); RegisterArchiveType(std::move(savedata_factory), ArchiveIdCode::SaveData);
@ -503,7 +503,7 @@ void ArchiveInit() {
if (sharedextsavedata_factory->Initialize()) if (sharedextsavedata_factory->Initialize())
RegisterArchiveType(std::move(sharedextsavedata_factory), ArchiveIdCode::SharedExtSaveData); RegisterArchiveType(std::move(sharedextsavedata_factory), ArchiveIdCode::SharedExtSaveData);
else else
LOG_ERROR(Service_FS, "Can't instantiate SharedExtSaveData archive with path %s", LOG_ERROR(Service_FS, "Can't instantiate SharedExtSaveData archive with path %s",
sharedextsavedata_factory->GetMountPoint().c_str()); sharedextsavedata_factory->GetMountPoint().c_str());
// Create the SaveDataCheck archive, basically a small variation of the RomFS archive // Create the SaveDataCheck archive, basically a small variation of the RomFS archive

View file

@ -434,7 +434,7 @@ static void IsSdmcWriteable(Service::Interface* self) {
} }
/** /**
* FS_User::FormatSaveData service function, * FS_User::FormatSaveData service function,
* formats the SaveData specified by the input path. * formats the SaveData specified by the input path.
* Inputs: * Inputs:
* 0 : 0x084C0242 * 0 : 0x084C0242
@ -520,7 +520,7 @@ static void CreateExtSaveData(Service::Interface* self) {
LOG_WARNING(Service_FS, "(STUBBED) savedata_high=%08X savedata_low=%08X cmd_buff[3]=%08X " LOG_WARNING(Service_FS, "(STUBBED) savedata_high=%08X savedata_low=%08X cmd_buff[3]=%08X "
"cmd_buff[4]=%08X cmd_buff[5]=%08X cmd_buff[6]=%08X cmd_buff[7]=%08X cmd_buff[8]=%08X " "cmd_buff[4]=%08X cmd_buff[5]=%08X cmd_buff[6]=%08X cmd_buff[7]=%08X cmd_buff[8]=%08X "
"cmd_buff[9]=%08X cmd_buff[10]=%08X cmd_buff[11]=%08X", save_high, save_low, "cmd_buff[9]=%08X cmd_buff[10]=%08X cmd_buff[11]=%08X", save_high, save_low,
cmd_buff[3], cmd_buff[4], cmd_buff[5], cmd_buff[6], cmd_buff[7], cmd_buff[8], cmd_buff[9], cmd_buff[3], cmd_buff[4], cmd_buff[5], cmd_buff[6], cmd_buff[7], cmd_buff[8], cmd_buff[9],
cmd_buff[10], cmd_buff[11]); cmd_buff[10], cmd_buff[11]);
cmd_buff[1] = CreateExtSaveData(media_type, save_high, save_low).raw; cmd_buff[1] = CreateExtSaveData(media_type, save_high, save_low).raw;
@ -544,7 +544,7 @@ static void DeleteExtSaveData(Service::Interface* self) {
u32 save_high = cmd_buff[3]; u32 save_high = cmd_buff[3];
u32 unknown = cmd_buff[4]; // TODO(Subv): Figure out what this is u32 unknown = cmd_buff[4]; // TODO(Subv): Figure out what this is
LOG_WARNING(Service_FS, "(STUBBED) save_low=%08X save_high=%08X media_type=%08X unknown=%08X", LOG_WARNING(Service_FS, "(STUBBED) save_low=%08X save_high=%08X media_type=%08X unknown=%08X",
save_low, save_high, cmd_buff[1] & 0xFF, unknown); save_low, save_high, cmd_buff[1] & 0xFF, unknown);
cmd_buff[1] = DeleteExtSaveData(media_type, save_high, save_low).raw; cmd_buff[1] = DeleteExtSaveData(media_type, save_high, save_low).raw;

View file

@ -167,7 +167,7 @@ static void WriteHWRegsWithMask(Service::Interface* self) {
u32* cmd_buff = Kernel::GetCommandBuffer(); u32* cmd_buff = Kernel::GetCommandBuffer();
u32 reg_addr = cmd_buff[1]; u32 reg_addr = cmd_buff[1];
u32 size = cmd_buff[2]; u32 size = cmd_buff[2];
u32* src_data = (u32*)Memory::GetPointer(cmd_buff[4]); u32* src_data = (u32*)Memory::GetPointer(cmd_buff[4]);
u32* mask_data = (u32*)Memory::GetPointer(cmd_buff[6]); u32* mask_data = (u32*)Memory::GetPointer(cmd_buff[6]);
@ -208,21 +208,21 @@ static void SetBufferSwap(u32 screen_id, const FrameBufferInfo& info) {
PAddr phys_address_left = Memory::VirtualToPhysicalAddress(info.address_left); PAddr phys_address_left = Memory::VirtualToPhysicalAddress(info.address_left);
PAddr phys_address_right = Memory::VirtualToPhysicalAddress(info.address_right); PAddr phys_address_right = Memory::VirtualToPhysicalAddress(info.address_right);
if (info.active_fb == 0) { if (info.active_fb == 0) {
WriteHWRegs(base_address + 4 * static_cast<u32>(GPU_REG_INDEX(framebuffer_config[screen_id].address_left1)), 4, WriteHWRegs(base_address + 4 * static_cast<u32>(GPU_REG_INDEX(framebuffer_config[screen_id].address_left1)), 4,
&phys_address_left); &phys_address_left);
WriteHWRegs(base_address + 4 * static_cast<u32>(GPU_REG_INDEX(framebuffer_config[screen_id].address_right1)), 4, WriteHWRegs(base_address + 4 * static_cast<u32>(GPU_REG_INDEX(framebuffer_config[screen_id].address_right1)), 4,
&phys_address_right); &phys_address_right);
} else { } else {
WriteHWRegs(base_address + 4 * static_cast<u32>(GPU_REG_INDEX(framebuffer_config[screen_id].address_left2)), 4, WriteHWRegs(base_address + 4 * static_cast<u32>(GPU_REG_INDEX(framebuffer_config[screen_id].address_left2)), 4,
&phys_address_left); &phys_address_left);
WriteHWRegs(base_address + 4 * static_cast<u32>(GPU_REG_INDEX(framebuffer_config[screen_id].address_right2)), 4, WriteHWRegs(base_address + 4 * static_cast<u32>(GPU_REG_INDEX(framebuffer_config[screen_id].address_right2)), 4,
&phys_address_right); &phys_address_right);
} }
WriteHWRegs(base_address + 4 * static_cast<u32>(GPU_REG_INDEX(framebuffer_config[screen_id].stride)), 4, WriteHWRegs(base_address + 4 * static_cast<u32>(GPU_REG_INDEX(framebuffer_config[screen_id].stride)), 4,
&info.stride); &info.stride);
WriteHWRegs(base_address + 4 * static_cast<u32>(GPU_REG_INDEX(framebuffer_config[screen_id].color_format)), 4, WriteHWRegs(base_address + 4 * static_cast<u32>(GPU_REG_INDEX(framebuffer_config[screen_id].color_format)), 4,
&info.format); &info.format);
WriteHWRegs(base_address + 4 * static_cast<u32>(GPU_REG_INDEX(framebuffer_config[screen_id].active_fb)), 4, WriteHWRegs(base_address + 4 * static_cast<u32>(GPU_REG_INDEX(framebuffer_config[screen_id].active_fb)), 4,
&info.shown_fb); &info.shown_fb);
} }
@ -374,7 +374,7 @@ static void ExecuteCommand(const Command& command, u32 thread_id) {
{ {
auto& params = command.set_command_list_last; auto& params = command.set_command_list_last;
WriteGPURegister(static_cast<u32>(GPU_REG_INDEX(command_processor_config.address)), WriteGPURegister(static_cast<u32>(GPU_REG_INDEX(command_processor_config.address)),
Memory::VirtualToPhysicalAddress(params.address) >> 3); Memory::VirtualToPhysicalAddress(params.address) >> 3);
WriteGPURegister(static_cast<u32>(GPU_REG_INDEX(command_processor_config.size)), params.size); WriteGPURegister(static_cast<u32>(GPU_REG_INDEX(command_processor_config.size)), params.size);
@ -470,7 +470,7 @@ static void SetLcdForceBlack(Service::Interface* self) {
LCD::Write(HW::VADDR_LCD + 4 * LCD_REG_INDEX(color_fill_top), data.raw); // Top LCD LCD::Write(HW::VADDR_LCD + 4 * LCD_REG_INDEX(color_fill_top), data.raw); // Top LCD
LCD::Write(HW::VADDR_LCD + 4 * LCD_REG_INDEX(color_fill_bottom), data.raw); // Bottom LCD LCD::Write(HW::VADDR_LCD + 4 * LCD_REG_INDEX(color_fill_bottom), data.raw); // Bottom LCD
cmd_buff[1] = RESULT_SUCCESS.raw; cmd_buff[1] = RESULT_SUCCESS.raw;
} }
@ -516,8 +516,8 @@ static void TriggerCmdReqQueue(Service::Interface* self) {
*/ */
static void ImportDisplayCaptureInfo(Service::Interface* self) { static void ImportDisplayCaptureInfo(Service::Interface* self) {
u32* cmd_buff = Kernel::GetCommandBuffer(); u32* cmd_buff = Kernel::GetCommandBuffer();
// TODO(Subv): We're always returning the framebuffer structures for thread_id = 0, // TODO(Subv): We're always returning the framebuffer structures for thread_id = 0,
// because we only support a single running application at a time. // because we only support a single running application at a time.
// This should always return the framebuffer data that is currently displayed on the screen. // This should always return the framebuffer data that is currently displayed on the screen.

View file

@ -106,7 +106,7 @@ void Update() {
mem->touch.index_reset_ticks_previous = mem->touch.index_reset_ticks; mem->touch.index_reset_ticks_previous = mem->touch.index_reset_ticks;
mem->touch.index_reset_ticks = (s64)CoreTiming::GetTicks(); mem->touch.index_reset_ticks = (s64)CoreTiming::GetTicks();
} }
// Signal both handles when there's an update to Pad or touch // Signal both handles when there's an update to Pad or touch
event_pad_or_touch_1->Signal(); event_pad_or_touch_1->Signal();
event_pad_or_touch_2->Signal(); event_pad_or_touch_2->Signal();

View file

@ -25,6 +25,6 @@ const Interface::FunctionInfo FunctionTable[] = {
HID_SPVR_Interface::HID_SPVR_Interface() { HID_SPVR_Interface::HID_SPVR_Interface() {
Register(FunctionTable); Register(FunctionTable);
} }
} // namespace HID } // namespace HID
} // namespace Service } // namespace Service

View file

@ -11,7 +11,7 @@
namespace Service { namespace Service {
namespace HID { namespace HID {
/** /**
* HID service interface. * HID service interface.
*/ */

View file

@ -20,15 +20,15 @@ enum class ChargeLevels : u32 {
CompletelyFull = 5, CompletelyFull = 5,
}; };
/** /**
* Represents the gamecoin file structure in the SharedExtData archive * Represents the gamecoin file structure in the SharedExtData archive
* More information in 3dbrew (http://www.3dbrew.org/wiki/Extdata#Shared_Extdata_0xf000000b_gamecoin.dat) * More information in 3dbrew (http://www.3dbrew.org/wiki/Extdata#Shared_Extdata_0xf000000b_gamecoin.dat)
*/ */
struct GameCoin { struct GameCoin {
u32 magic; ///< Magic number: 0x4F00 u32 magic; ///< Magic number: 0x4F00
u16 total_coins; ///< Total Play Coins u16 total_coins; ///< Total Play Coins
u16 total_coins_on_date; ///< Total Play Coins obtained on the date stored below. u16 total_coins_on_date; ///< Total Play Coins obtained on the date stored below.
u32 step_count; ///< Total step count at the time a new Play Coin was obtained. u32 step_count; ///< Total step count at the time a new Play Coin was obtained.
u32 last_step_count; ///< Step count for the day the last Play Coin was obtained u32 last_step_count; ///< Step count for the day the last Play Coin was obtained
u16 year; u16 year;
u8 month; u8 month;

View file

@ -18,6 +18,6 @@ const Interface::FunctionInfo FunctionTable[] = {
PTM_Play_Interface::PTM_Play_Interface() { PTM_Play_Interface::PTM_Play_Interface() {
Register(FunctionTable); Register(FunctionTable);
} }
} // namespace PTM } // namespace PTM
} // namespace Service } // namespace Service

View file

@ -52,7 +52,7 @@ std::unordered_map<std::string, Kernel::SharedPtr<Interface>> g_kernel_named_por
std::unordered_map<std::string, Kernel::SharedPtr<Interface>> g_srv_services; std::unordered_map<std::string, Kernel::SharedPtr<Interface>> g_srv_services;
/** /**
* Creates a function string for logging, complete with the name (or header code, depending * Creates a function string for logging, complete with the name (or header code, depending
* on what's passed in) the port name, and all the cmd_buff arguments. * on what's passed in) the port name, and all the cmd_buff arguments.
*/ */
static std::string MakeFunctionString(const char* name, const char* port_name, const u32* cmd_buff) { static std::string MakeFunctionString(const char* name, const char* port_name, const u32* cmd_buff) {

View file

@ -139,7 +139,7 @@ static int TranslateError(int error) {
auto found = error_map.find(error); auto found = error_map.find(error);
if (found != error_map.end()) if (found != error_map.end())
return -found->second; return -found->second;
return error; return error;
} }
@ -346,7 +346,7 @@ static void Bind(Service::Interface* self) {
sockaddr sock_addr = CTRSockAddr::ToPlatform(*ctr_sock_addr); sockaddr sock_addr = CTRSockAddr::ToPlatform(*ctr_sock_addr);
int res = ::bind(socket_handle, &sock_addr, std::max<u32>(sizeof(sock_addr), len)); int res = ::bind(socket_handle, &sock_addr, std::max<u32>(sizeof(sock_addr), len));
int result = 0; int result = 0;
if (res != 0) if (res != 0)
result = TranslateError(GET_ERRNO); result = TranslateError(GET_ERRNO);
@ -360,14 +360,14 @@ static void Fcntl(Service::Interface* self) {
u32 socket_handle = cmd_buffer[1]; u32 socket_handle = cmd_buffer[1];
u32 ctr_cmd = cmd_buffer[2]; u32 ctr_cmd = cmd_buffer[2];
u32 ctr_arg = cmd_buffer[3]; u32 ctr_arg = cmd_buffer[3];
int result = 0; int result = 0;
u32 posix_ret = 0; // TODO: Check what hardware returns for F_SETFL (unspecified by POSIX) u32 posix_ret = 0; // TODO: Check what hardware returns for F_SETFL (unspecified by POSIX)
SCOPE_EXIT({ SCOPE_EXIT({
cmd_buffer[1] = result; cmd_buffer[1] = result;
cmd_buffer[2] = posix_ret; cmd_buffer[2] = posix_ret;
}); });
if (ctr_cmd == 3) { // F_GETFL if (ctr_cmd == 3) { // F_GETFL
#if EMU_PLATFORM == PLATFORM_WINDOWS #if EMU_PLATFORM == PLATFORM_WINDOWS
posix_ret = 0; posix_ret = 0;
@ -404,11 +404,11 @@ static void Fcntl(Service::Interface* self) {
posix_ret = -1; posix_ret = -1;
return; return;
} }
flags &= ~O_NONBLOCK; flags &= ~O_NONBLOCK;
if (ctr_arg & 4) // O_NONBLOCK if (ctr_arg & 4) // O_NONBLOCK
flags |= O_NONBLOCK; flags |= O_NONBLOCK;
int ret = ::fcntl(socket_handle, F_SETFL, flags); int ret = ::fcntl(socket_handle, F_SETFL, flags);
if (ret == SOCKET_ERROR_VALUE) { if (ret == SOCKET_ERROR_VALUE) {
result = TranslateError(GET_ERRNO); result = TranslateError(GET_ERRNO);
@ -439,8 +439,8 @@ static void Listen(Service::Interface* self) {
} }
static void Accept(Service::Interface* self) { static void Accept(Service::Interface* self) {
// TODO(Subv): Calling this function on a blocking socket will block the emu thread, // TODO(Subv): Calling this function on a blocking socket will block the emu thread,
// preventing graceful shutdown when closing the emulator, this can be fixed by always // preventing graceful shutdown when closing the emulator, this can be fixed by always
// performing nonblocking operations and spinlock until the data is available // performing nonblocking operations and spinlock until the data is available
u32* cmd_buffer = Kernel::GetCommandBuffer(); u32* cmd_buffer = Kernel::GetCommandBuffer();
u32 socket_handle = cmd_buffer[1]; u32 socket_handle = cmd_buffer[1];
@ -448,7 +448,7 @@ static void Accept(Service::Interface* self) {
sockaddr addr; sockaddr addr;
socklen_t addr_len = sizeof(addr); socklen_t addr_len = sizeof(addr);
u32 ret = static_cast<u32>(::accept(socket_handle, &addr, &addr_len)); u32 ret = static_cast<u32>(::accept(socket_handle, &addr, &addr_len));
if ((s32)ret != SOCKET_ERROR_VALUE) if ((s32)ret != SOCKET_ERROR_VALUE)
open_sockets[ret] = { ret, true }; open_sockets[ret] = { ret, true };
@ -525,8 +525,8 @@ static void SendTo(Service::Interface* self) {
} }
static void RecvFrom(Service::Interface* self) { static void RecvFrom(Service::Interface* self) {
// TODO(Subv): Calling this function on a blocking socket will block the emu thread, // TODO(Subv): Calling this function on a blocking socket will block the emu thread,
// preventing graceful shutdown when closing the emulator, this can be fixed by always // preventing graceful shutdown when closing the emulator, this can be fixed by always
// performing nonblocking operations and spinlock until the data is available // performing nonblocking operations and spinlock until the data is available
u32* cmd_buffer = Kernel::GetCommandBuffer(); u32* cmd_buffer = Kernel::GetCommandBuffer();
u32 socket_handle = cmd_buffer[1]; u32 socket_handle = cmd_buffer[1];
@ -568,7 +568,7 @@ static void Poll(Service::Interface* self) {
pollfd* platform_pollfd = new pollfd[nfds]; pollfd* platform_pollfd = new pollfd[nfds];
for (unsigned current_fds = 0; current_fds < nfds; ++current_fds) for (unsigned current_fds = 0; current_fds < nfds; ++current_fds)
platform_pollfd[current_fds] = CTRPollFD::ToPlatform(input_fds[current_fds]); platform_pollfd[current_fds] = CTRPollFD::ToPlatform(input_fds[current_fds]);
int ret = ::poll(platform_pollfd, nfds, timeout); int ret = ::poll(platform_pollfd, nfds, timeout);
// Now update the output pollfd structure // Now update the output pollfd structure
@ -630,7 +630,7 @@ static void GetPeerName(Service::Interface* self) {
socklen_t len = cmd_buffer[2]; socklen_t len = cmd_buffer[2];
CTRSockAddr* ctr_dest_addr = reinterpret_cast<CTRSockAddr*>(Memory::GetPointer(cmd_buffer[0x104 >> 2])); CTRSockAddr* ctr_dest_addr = reinterpret_cast<CTRSockAddr*>(Memory::GetPointer(cmd_buffer[0x104 >> 2]));
sockaddr dest_addr; sockaddr dest_addr;
socklen_t dest_addr_len = sizeof(dest_addr); socklen_t dest_addr_len = sizeof(dest_addr);
int ret = ::getpeername(socket_handle, &dest_addr, &dest_addr_len); int ret = ::getpeername(socket_handle, &dest_addr, &dest_addr_len);
@ -651,8 +651,8 @@ static void GetPeerName(Service::Interface* self) {
} }
static void Connect(Service::Interface* self) { static void Connect(Service::Interface* self) {
// TODO(Subv): Calling this function on a blocking socket will block the emu thread, // TODO(Subv): Calling this function on a blocking socket will block the emu thread,
// preventing graceful shutdown when closing the emulator, this can be fixed by always // preventing graceful shutdown when closing the emulator, this can be fixed by always
// performing nonblocking operations and spinlock until the data is available // performing nonblocking operations and spinlock until the data is available
u32* cmd_buffer = Kernel::GetCommandBuffer(); u32* cmd_buffer = Kernel::GetCommandBuffer();
u32 socket_handle = cmd_buffer[1]; u32 socket_handle = cmd_buffer[1];

View file

@ -228,7 +228,7 @@ static ResultCode WaitSynchronizationN(s32* out, Handle* handles, s32 handle_cou
// Actually wait the current thread on each object if we decided to wait... // Actually wait the current thread on each object if we decided to wait...
std::vector<SharedPtr<Kernel::WaitObject>> wait_objects; std::vector<SharedPtr<Kernel::WaitObject>> wait_objects;
wait_objects.reserve(handle_count); wait_objects.reserve(handle_count);
for (int i = 0; i < handle_count; ++i) { for (int i = 0; i < handle_count; ++i) {
auto object = Kernel::g_handle_table.GetWaitObject(handles[i]); auto object = Kernel::g_handle_table.GetWaitObject(handles[i]);
object->AddWaitingThread(Kernel::GetCurrentThread()); object->AddWaitingThread(Kernel::GetCurrentThread());
@ -475,7 +475,7 @@ static ResultCode GetProcessIdOfThread(u32* process_id, Handle thread_handle) {
return ERR_INVALID_HANDLE; return ERR_INVALID_HANDLE;
const SharedPtr<Kernel::Process> process = thread->owner_process; const SharedPtr<Kernel::Process> process = thread->owner_process;
ASSERT_MSG(process != nullptr, "Invalid parent process for thread=0x%08X", thread_handle); ASSERT_MSG(process != nullptr, "Invalid parent process for thread=0x%08X", thread_handle);
*process_id = process->process_id; *process_id = process->process_id;

View file

@ -140,7 +140,7 @@ inline void Write(u32 addr, const T data) {
// Raw copies do not perform color conversion nor tiled->linear / linear->tiled conversions // Raw copies do not perform color conversion nor tiled->linear / linear->tiled conversions
// TODO(Subv): Verify if raw copies perform scaling // TODO(Subv): Verify if raw copies perform scaling
memcpy(dst_pointer, src_pointer, output_size); memcpy(dst_pointer, src_pointer, output_size);
LOG_TRACE(HW_GPU, "DisplayTriggerTransfer: 0x%08x bytes from 0x%08x(%ux%u)-> 0x%08x(%ux%u), output format: %x, flags 0x%08X, Raw copy", LOG_TRACE(HW_GPU, "DisplayTriggerTransfer: 0x%08x bytes from 0x%08x(%ux%u)-> 0x%08x(%ux%u), output format: %x, flags 0x%08X, Raw copy",
output_size, output_size,
config.GetPhysicalInputAddress(), config.input_width.Value(), config.input_height.Value(), config.GetPhysicalInputAddress(), config.input_width.Value(), config.input_height.Value(),
@ -159,14 +159,14 @@ inline void Write(u32 addr, const T data) {
for (u32 x = 0; x < output_width; ++x) { for (u32 x = 0; x < output_width; ++x) {
Math::Vec4<u8> src_color = { 0, 0, 0, 0 }; Math::Vec4<u8> src_color = { 0, 0, 0, 0 };
// Calculate the [x,y] position of the input image // Calculate the [x,y] position of the input image
// based on the current output position and the scale // based on the current output position and the scale
u32 input_x = x * horizontal_scale; u32 input_x = x * horizontal_scale;
u32 input_y = y * vertical_scale; u32 input_y = y * vertical_scale;
if (config.flip_vertically) { if (config.flip_vertically) {
// Flip the y value of the output data, // Flip the y value of the output data,
// we do this after calculating the [x,y] position of the input image // we do this after calculating the [x,y] position of the input image
// to account for the scaling options. // to account for the scaling options.
y = output_height - y - 1; y = output_height - y - 1;
} }
@ -302,7 +302,7 @@ static void VBlankCallback(u64 userdata, int cycles_late) {
// - If frameskip == 0 (disabled), always swap buffers // - If frameskip == 0 (disabled), always swap buffers
// - If frameskip == 1, swap buffers every other frame (starting from the first frame) // - If frameskip == 1, swap buffers every other frame (starting from the first frame)
// - If frameskip > 1, swap buffers every frameskip^n frames (starting from the second frame) // - If frameskip > 1, swap buffers every frameskip^n frames (starting from the second frame)
if ((((Settings::values.frame_skip != 1) ^ last_skip_frame) && last_skip_frame != g_skip_frame) || if ((((Settings::values.frame_skip != 1) ^ last_skip_frame) && last_skip_frame != g_skip_frame) ||
Settings::values.frame_skip == 0) { Settings::values.frame_skip == 0) {
VideoCore::g_renderer->SwapBuffers(); VideoCore::g_renderer->SwapBuffers();
} }

View file

@ -66,5 +66,5 @@ void Init() {
void Shutdown() { void Shutdown() {
LOG_DEBUG(HW_LCD, "shutdown OK"); LOG_DEBUG(HW_LCD, "shutdown OK");
} }
} // namespace } // namespace

View file

@ -85,5 +85,5 @@ void Init();
/// Shutdown hardware /// Shutdown hardware
void Shutdown(); void Shutdown();
} // namespace } // namespace

View file

@ -234,7 +234,7 @@ ResultStatus AppLoader_THREEDSX::Load() {
Kernel::g_current_process = Kernel::Process::Create(filename, 0); Kernel::g_current_process = Kernel::Process::Create(filename, 0);
Kernel::g_current_process->svc_access_mask.set(); Kernel::g_current_process->svc_access_mask.set();
Kernel::g_current_process->address_mappings = default_address_mappings; Kernel::g_current_process->address_mappings = default_address_mappings;
// Attach the default resource limit (APPLICATION) to the process // Attach the default resource limit (APPLICATION) to the process
Kernel::g_current_process->resource_limit = Kernel::ResourceLimit::GetForCategory(Kernel::ResourceLimitCategory::APPLICATION); Kernel::g_current_process->resource_limit = Kernel::ResourceLimit::GetForCategory(Kernel::ResourceLimitCategory::APPLICATION);

View file

@ -97,7 +97,7 @@ enum : VAddr {
SHARED_PAGE_VADDR_END = SHARED_PAGE_VADDR + SHARED_PAGE_SIZE, SHARED_PAGE_VADDR_END = SHARED_PAGE_VADDR + SHARED_PAGE_SIZE,
// TODO(yuriks): The size of this area is dynamic, the kernel grows // TODO(yuriks): The size of this area is dynamic, the kernel grows
// it as more and more threads are created. For now we'll just use a // it as more and more threads are created. For now we'll just use a
// hardcoded value. // hardcoded value.
/// Area where TLS (Thread-Local Storage) buffers are allocated. /// Area where TLS (Thread-Local Storage) buffers are allocated.
TLS_AREA_VADDR = 0x1FF82000, TLS_AREA_VADDR = 0x1FF82000,

View file

@ -136,7 +136,7 @@ static inline void WritePicaReg(u32 id, u32 value, u32 mask) {
input.attr[i][0].ToFloat32(), input.attr[i][1].ToFloat32(), input.attr[i][0].ToFloat32(), input.attr[i][1].ToFloat32(),
input.attr[i][2].ToFloat32(), input.attr[i][3].ToFloat32()); input.attr[i][2].ToFloat32(), input.attr[i][3].ToFloat32());
} }
// Load per-vertex data from the loader arrays // Load per-vertex data from the loader arrays
for (unsigned int comp = 0; comp < vertex_attribute_elements[i]; ++comp) { for (unsigned int comp = 0; comp < vertex_attribute_elements[i]; ++comp) {
const u8* srcdata = Memory::GetPhysicalPointer(vertex_attribute_sources[i] + vertex_attribute_strides[i] * vertex + comp * vertex_attribute_element_size[i]); const u8* srcdata = Memory::GetPhysicalPointer(vertex_attribute_sources[i] + vertex_attribute_strides[i] * vertex + comp * vertex_attribute_element_size[i]);
@ -193,7 +193,7 @@ static inline void WritePicaReg(u32 id, u32 value, u32 mask) {
const Pica::VertexShader::OutputVertex& v2) { const Pica::VertexShader::OutputVertex& v2) {
VideoCore::g_renderer->hw_rasterizer->AddTriangle(v0, v1, v2); VideoCore::g_renderer->hw_rasterizer->AddTriangle(v0, v1, v2);
}; };
primitive_assembler.SubmitVertex(output, AddHWTriangle); primitive_assembler.SubmitVertex(output, AddHWTriangle);
} else { } else {
// Send to triangle clipper // Send to triangle clipper
@ -282,7 +282,7 @@ static inline void WritePicaReg(u32 id, u32 value, u32 mask) {
} }
break; break;
} }
// Load default vertex input attributes // Load default vertex input attributes
case PICA_REG_INDEX_WORKAROUND(vs_default_attributes_setup.set_value[0], 0x233): case PICA_REG_INDEX_WORKAROUND(vs_default_attributes_setup.set_value[0], 0x233):
case PICA_REG_INDEX_WORKAROUND(vs_default_attributes_setup.set_value[1], 0x234): case PICA_REG_INDEX_WORKAROUND(vs_default_attributes_setup.set_value[1], 0x234):
@ -306,7 +306,7 @@ static inline void WritePicaReg(u32 id, u32 value, u32 mask) {
} }
Math::Vec4<float24>& attribute = g_state.vs.default_attributes[setup.index]; Math::Vec4<float24>& attribute = g_state.vs.default_attributes[setup.index];
// NOTE: The destination component order indeed is "backwards" // NOTE: The destination component order indeed is "backwards"
attribute.w = float24::FromRawFloat24(default_attr_write_buffer[0] >> 8); attribute.w = float24::FromRawFloat24(default_attr_write_buffer[0] >> 8);
attribute.z = float24::FromRawFloat24(((default_attr_write_buffer[0] & 0xFF) << 16) | ((default_attr_write_buffer[1] >> 16) & 0xFFFF)); attribute.z = float24::FromRawFloat24(((default_attr_write_buffer[0] & 0xFF) << 16) | ((default_attr_write_buffer[1] >> 16) & 0xFFFF));

View file

@ -319,7 +319,7 @@ const Math::Vec4<u8> LookupTexture(const u8* source, int x, int y, const Texture
// TODO(neobrain): Fix code design to unify vertical block offsets! // TODO(neobrain): Fix code design to unify vertical block offsets!
source += coarse_y * info.stride; source += coarse_y * info.stride;
} }
// TODO: Assert that width/height are multiples of block dimensions // TODO: Assert that width/height are multiples of block dimensions
switch (info.format) { switch (info.format) {

View file

@ -461,7 +461,7 @@ public:
// e.g. Vec2 uv() { return Vec2(x,y); } // e.g. Vec2 uv() { return Vec2(x,y); }
// _DEFINE_SWIZZLER2 defines a single such function // _DEFINE_SWIZZLER2 defines a single such function
// DEFINE_SWIZZLER2_COMP1 defines one-component functions for all component names (x<->r) // DEFINE_SWIZZLER2_COMP1 defines one-component functions for all component names (x<->r)
// DEFINE_SWIZZLER2_COMP2 defines two component functions for all component names (x<->r) and permutations (xy<->yx) // DEFINE_SWIZZLER2_COMP2 defines two component functions for all component names (x<->r) and permutations (xy<->yx)
#define _DEFINE_SWIZZLER2(a, b, name) const Vec2<T> name() const { return Vec2<T>(a, b); } #define _DEFINE_SWIZZLER2(a, b, name) const Vec2<T> name() const { return Vec2<T>(a, b); }
#define DEFINE_SWIZZLER2_COMP1(a, a2) \ #define DEFINE_SWIZZLER2_COMP1(a, a2) \

View file

@ -16,7 +16,7 @@
#include "common/common_types.h" #include "common/common_types.h"
#include "common/logging/log.h" #include "common/logging/log.h"
#include "math.h" #include "math.h"
namespace Pica { namespace Pica {
@ -337,7 +337,7 @@ struct Regs {
return (stage_index < 4) && (update_mask_a & (1 << stage_index)); return (stage_index < 4) && (update_mask_a & (1 << stage_index));
} }
} tev_combiner_buffer_input; } tev_combiner_buffer_input;
INSERT_PADDING_WORDS(0xf); INSERT_PADDING_WORDS(0xf);
TevStageConfig tev_stage4; TevStageConfig tev_stage4;
INSERT_PADDING_WORDS(0x3); INSERT_PADDING_WORDS(0x3);
@ -703,11 +703,11 @@ struct Regs {
struct { struct {
// Index of the current default attribute // Index of the current default attribute
u32 index; u32 index;
// Writing to these registers sets the "current" default attribute. // Writing to these registers sets the "current" default attribute.
u32 set_value[3]; u32 set_value[3];
} vs_default_attributes_setup; } vs_default_attributes_setup;
INSERT_PADDING_WORDS(0x28); INSERT_PADDING_WORDS(0x28);
enum class TriangleTopology : u32 { enum class TriangleTopology : u32 {

View file

@ -104,7 +104,7 @@ static u32 GetDepth(int x, int y) {
u8* depth_buffer = Memory::GetPhysicalPointer(addr); u8* depth_buffer = Memory::GetPhysicalPointer(addr);
y = framebuffer.height - y; y = framebuffer.height - y;
const u32 coarse_y = y & ~7; const u32 coarse_y = y & ~7;
u32 bytes_per_pixel = Regs::BytesPerDepthPixel(framebuffer.depth_format); u32 bytes_per_pixel = Regs::BytesPerDepthPixel(framebuffer.depth_format);
u32 stride = framebuffer.width * bytes_per_pixel; u32 stride = framebuffer.width * bytes_per_pixel;

View file

@ -62,9 +62,9 @@ static int TestPointer(const PROC pTest)
ptrdiff_t iTest; ptrdiff_t iTest;
if(!pTest) return 0; if(!pTest) return 0;
iTest = (ptrdiff_t)pTest; iTest = (ptrdiff_t)pTest;
if(iTest == 1 || iTest == 2 || iTest == 3 || iTest == -1) return 0; if(iTest == 1 || iTest == 2 || iTest == 3 || iTest == -1) return 0;
return 1; return 1;
} }
@ -79,7 +79,7 @@ static PROC WinGetProcAddress(const char *name)
glMod = GetModuleHandleA("OpenGL32.dll"); glMod = GetModuleHandleA("OpenGL32.dll");
return (PROC)GetProcAddress(glMod, (LPCSTR)name); return (PROC)GetProcAddress(glMod, (LPCSTR)name);
} }
#define IntGetProcAddress(name) WinGetProcAddress(name) #define IntGetProcAddress(name) WinGetProcAddress(name)
#else #else
#if defined(__APPLE__) #if defined(__APPLE__)
@ -1083,7 +1083,7 @@ static ogl_StrToExtMap *FindExtEntry(const char *extensionName)
if(strcmp(extensionName, currLoc->extensionName) == 0) if(strcmp(extensionName, currLoc->extensionName) == 0)
return currLoc; return currLoc;
} }
return NULL; return NULL;
} }
@ -1135,15 +1135,15 @@ int ogl_LoadFunctions()
{ {
int numFailed = 0; int numFailed = 0;
ClearExtensionVars(); ClearExtensionVars();
_ptrc_glGetIntegerv = (void (CODEGEN_FUNCPTR *)(GLenum, GLint *))IntGetProcAddress("glGetIntegerv"); _ptrc_glGetIntegerv = (void (CODEGEN_FUNCPTR *)(GLenum, GLint *))IntGetProcAddress("glGetIntegerv");
if(!_ptrc_glGetIntegerv) return ogl_LOAD_FAILED; if(!_ptrc_glGetIntegerv) return ogl_LOAD_FAILED;
_ptrc_glGetStringi = (const GLubyte * (CODEGEN_FUNCPTR *)(GLenum, GLuint))IntGetProcAddress("glGetStringi"); _ptrc_glGetStringi = (const GLubyte * (CODEGEN_FUNCPTR *)(GLenum, GLuint))IntGetProcAddress("glGetStringi");
if(!_ptrc_glGetStringi) return ogl_LOAD_FAILED; if(!_ptrc_glGetStringi) return ogl_LOAD_FAILED;
ProcExtsFromExtList(); ProcExtsFromExtList();
numFailed = Load_Version_3_2(); numFailed = Load_Version_3_2();
if(numFailed == 0) if(numFailed == 0)
return ogl_LOAD_SUCCEEDED; return ogl_LOAD_SUCCEEDED;
else else
@ -1177,7 +1177,7 @@ int ogl_IsVersionGEQ(int majorVersion, int minorVersion)
{ {
if(g_major_version == 0) if(g_major_version == 0)
GetGLVersion(); GetGLVersion();
if(majorVersion > g_major_version) return 1; if(majorVersion > g_major_version) return 1;
if(majorVersion < g_major_version) return 0; if(majorVersion < g_major_version) return 0;
if(minorVersion >= g_minor_version) return 1; if(minorVersion >= g_minor_version) return 1;

View file

@ -350,7 +350,7 @@ void RasterizerOpenGL::NotifyPicaRegisterChanged(u32 id) {
case PICA_REG_INDEX(tev_stage5.color_scale): case PICA_REG_INDEX(tev_stage5.color_scale):
SyncTevMultipliers(5, regs.tev_stage5); SyncTevMultipliers(5, regs.tev_stage5);
break; break;
// TEV combiner buffer color // TEV combiner buffer color
case PICA_REG_INDEX(tev_combiner_buffer_color): case PICA_REG_INDEX(tev_combiner_buffer_color):
SyncCombinerColor(); SyncCombinerColor();

View file

@ -82,7 +82,7 @@ void OpenGLState::Apply() {
} else { } else {
glDisable(GL_STENCIL_TEST); glDisable(GL_STENCIL_TEST);
} }
} }
if (stencil.test_func != cur_state.stencil.test_func || if (stencil.test_func != cur_state.stencil.test_func ||
stencil.test_ref != cur_state.stencil.test_ref || stencil.test_ref != cur_state.stencil.test_ref ||

View file

@ -61,7 +61,7 @@ public:
static const OpenGLState& GetCurState() { static const OpenGLState& GetCurState() {
return cur_state; return cur_state;
} }
/// Apply this state as the current OpenGL state /// Apply this state as the current OpenGL state
void Apply(); void Apply();

View file

@ -157,7 +157,7 @@ void RendererOpenGL::LoadFBToActiveGLTexture(const GPU::Regs::FramebufferConfig&
state.texture_units[0].enabled_2d = true; state.texture_units[0].enabled_2d = true;
state.texture_units[0].texture_2d = texture.handle; state.texture_units[0].texture_2d = texture.handle;
state.Apply(); state.Apply();
glActiveTexture(GL_TEXTURE0); glActiveTexture(GL_TEXTURE0);
glPixelStorei(GL_UNPACK_ROW_LENGTH, (GLint)pixel_stride); glPixelStorei(GL_UNPACK_ROW_LENGTH, (GLint)pixel_stride);

View file

@ -330,7 +330,7 @@ static void ProcessShaderCode(VertexShaderState& state) {
case OpCode::Type::MultiplyAdd: case OpCode::Type::MultiplyAdd:
{ {
if ((instr.opcode.Value().EffectiveOpCode() == OpCode::Id::MAD) || if ((instr.opcode.Value().EffectiveOpCode() == OpCode::Id::MAD) ||
(instr.opcode.Value().EffectiveOpCode() == OpCode::Id::MADI)) { (instr.opcode.Value().EffectiveOpCode() == OpCode::Id::MADI)) {
const SwizzlePattern& swizzle = *(SwizzlePattern*)&swizzle_data[instr.mad.operand_desc_id]; const SwizzlePattern& swizzle = *(SwizzlePattern*)&swizzle_data[instr.mad.operand_desc_id];
@ -547,7 +547,7 @@ OutputVertex RunShader(const InputVertex& input, int num_attributes) {
const auto& attribute_register_map = regs.vs_input_register_map; const auto& attribute_register_map = regs.vs_input_register_map;
float24 dummy_register; float24 dummy_register;
boost::fill(state.input_register_table, &dummy_register); boost::fill(state.input_register_table, &dummy_register);
if (num_attributes > 0) state.input_register_table[attribute_register_map.attribute0_register] = &input.attr[0].x; if (num_attributes > 0) state.input_register_table[attribute_register_map.attribute0_register] = &input.attr[0].x;
if (num_attributes > 1) state.input_register_table[attribute_register_map.attribute1_register] = &input.attr[1].x; if (num_attributes > 1) state.input_register_table[attribute_register_map.attribute1_register] = &input.attr[1].x;
if (num_attributes > 2) state.input_register_table[attribute_register_map.attribute2_register] = &input.attr[2].x; if (num_attributes > 2) state.input_register_table[attribute_register_map.attribute2_register] = &input.attr[2].x;