aboutsummaryrefslogtreecommitdiff
path: root/backends/platform/3ds
diff options
context:
space:
mode:
Diffstat (limited to 'backends/platform/3ds')
-rw-r--r--backends/platform/3ds/README185
-rw-r--r--backends/platform/3ds/README.md230
2 files changed, 230 insertions, 185 deletions
diff --git a/backends/platform/3ds/README b/backends/platform/3ds/README
deleted file mode 100644
index 516e694f64..0000000000
--- a/backends/platform/3ds/README
+++ /dev/null
@@ -1,185 +0,0 @@
-ScummVM 3DS README
-------------------------------------------------------------------------
-
-Table of Contents:
-------------------
-1.0) Installation
- * 1.1 3DSX installation
- * 1.2 CIA installation
-2.0) Controls
- * 2.1 Default key mappings
- * 2.2 Hover mode
- * 2.3 Drag mode
-3.0) Supported Games
-4.0) Compiling
- * 4.1 Prerequisites
- * * 4.1.1 Compiling third-party libraries
- * 4.2 Compiling ScummVM
- * 4.3 Warning for 3DSX build
-
-
-
-1.0) Installation
------------------
-There are two possible formats to be used: 3DSX and CIA (recommended).
-The 3DSX format is exclusively used by the Homebrew Launcher and its derivatives.
-The CIA format can be installed directly to the 3DS home menu and can be launched
-using any CFW (Custom Firmware) of your choice.
-
-Installing the Homebrew Launcher or any CFW is beyond the scope of this README.
-Look elsewhere to see how to install those if you do not already have them set up.
-
-
-1.1) 3DSX installation
-----------------
-The CIA format is recommended for stability and maximum game support. If that is
-not an option, you will need one of a collection of 3DS titles installed on your
-system in order to properly launch ScummVM as a 3DSX. This is because the
-Homebrew Launcher hijacks other processes to run 3DSX homebrew, and ScummVM is a
-particularly large homebrew that can't be launched with the resources provided
-by standard system applications.
-
-You will need one of the following (installed or physically in cart slot):
-
-- Youtube
-- Monster Hunter 4 Ultimate Special Demo
-- Monster Hunter 4 Ultimate
-- Monster Hunter 4G
-- Super Smash Bros. for Nintendo 3DS Demo
-- Super Smash Bros. for Nintendo 3DS Special Demo
-- Super Smash Bros. for Nintendo 3DS
-
-Once you have one of the above, you need to merely extract all ScummVM 3DS files
-to the root of your SD card so that all files reside in the /3ds/scummvm/ directory.
-
-
-1.2) CIA installation
----------------------
-The CIA format requires a DSP binary dump saved on your SD card as /3ds/dspfirm.cdc
-for proper audio support. You can search online to find software to dump this.
-Not having this file will cause many problems with games that need audio, sometimes
-even crashing, so this is NOT considered optional.
-
-Using any CIA installation software (search elsewhere for that), you need to install
-the scummvm.cia file. Then, just like what is done with the 3DSX installation, you
-need to extract all ScummVM 3DS files (scummvm.cia excluded) to the root of your SD
-card so that all files reside in the /3ds/scummvm/ directory.
-
-
-
-2.0) Controls
--------------
-
-2.1) Default key mappings
--------------------------
-The D-Pad and A/B/X/Y buttons have mirrored usage. So they do the same things
-depending on if you're right or left-handed.
-
-| Buttons | Function |
-|------------|--------------------------------|
-| A / D-left | Left-click |
-| X / D-up | Right-click |
-| B / D-down | ESC (skips cutscenes and such) |
-| L | Use virtual keyboard |
-| R | Toggle hover/drag modes |
-| Start | Open game menu |
-| Select | Open 3DS config menu |
-| Circle Pad | Move the cursor |
-
-
-2.2) Hover mode
----------------
-When you use the touchscreen, you are simulating the mere moving of the mouse. You
-can click only with taps, meaning it is impossible to drag stuff or hold down a
-mouse button without using buttons mapped to right/left-click.
-
-
-2.3) Drag mode
---------------
-Every time you touch and release the touchscreen, you are simulating the click and
-release of the mouse buttons. At the moment, this is only a left-click.
-
-
-
-3.0) Supported Games
---------------------
-The full game engine compatibility list can be found here:
-http://scummvm.org/compatibility/
-
-While all the above games should run on the 3DS (report if they do not), there are
-many games which are unplayable due to the lack of CPU speed on the 3DS. So if
-you play any games that run really slow, this is not considered a bug, but rather
-a hardware limitation. Though possible GPU optimizations are always in the works.
-The New 3DS console has much better performance, but there are still many newer and
-high-resolution games that cannot be played. A list of these unplayable games and
-game engines will eventually be listed here.
-
-
-
-4.0) Compiling
---------------
-
-4.1) Prerequisites
-------------------
- - devkitARM (presumably with libctru, picasso and such)
- - citro3d
- - Optional: You should compile third-party libraries for the 3ds (commonly referred
- to as portlibs in the devkitPRO community). Some games requires these to operate
- properly.
-
-
-4.1.1) Compiling third-party libraries
---------------------------------------
-Most libraries used can be compiled with same commands and configuration flags.
-
-It is assumed that you have these environment variables defined:
- - DEVKITPRO Your root devkitPro directory
- - DEVKITARM Your root devkitARM directory (probably same as $DEVKITPRO/devkitARM)
- - CTRULIB Your root libctru directory (probably same as $DEVKITPRO/libctru)
-
-In the source directory of the library:
- - $ export PORTLIBS=$DEVKITPRO/portlibs/armv6k
- - $ export PATH=$DEVKITARM/bin:$PATH
- - $ export PKG_CONFIG_PATH=$PORTLIBS/lib/pkgconfig
- - $ export CFLAGS="-g -march=armv6k -mtune=mpcore -mfloat-abi=hard -O2
- -mword-relocations -ffunction-sections -fdata-sections"
- - $ export CPPFLAGS="-I$PORTLIBS/include -I$CTRULIB/include"
- - $ export LDFLAGS="-L$PORTLIBS/lib"
- - $ mkdir -p $PORTLIBS
- - $ ./configure --prefix=$PORTLIBS --host=arm-none-eabi --disable-shared
- --enable-static
- - $ make
- - $ make install
-
-Useful libraries (and special config flags needed):
- - zlib
- - libpng
- - libjpeg
- - freetype2 --without-bzip2 --without-harfbuzz
- - libmad
- - tremor
- - flac --disable-cpplibs --without-flac
- - faad
-
-
-4.2) Compiling ScummVM
-----------------------
- - $ ./configure --host=3ds
- - $ make
-
-Additionally compile to specific formats to be used on the 3ds:
- - $ make scummvm.3dsx
- - $ make scummvm.cia
-
-
-4.3) Warning for 3DSX build
----------------------------
-The above configuration command will include all game engines by default and will
-likely be too massive to run using the 3DSX format. Until dynamic modules are figured
-out, you should configure engines like this for 3DSX builds:
-
- - $ ./configure --host=3ds --disable-all-engines--enable-engine=scumm-7-8,myst,riven,
- sword1,sword2,sword25,sci,lure,sky,agi,agos
-
-Choose whatever engines you want, but if the ELF's .text section exceeds ~10MB, it
-won't be playable unless it's a CIA.
diff --git a/backends/platform/3ds/README.md b/backends/platform/3ds/README.md
new file mode 100644
index 0000000000..a17fc6a98e
--- /dev/null
+++ b/backends/platform/3ds/README.md
@@ -0,0 +1,230 @@
+ScummVM 3DS README
+------------------------------------------------------------------------
+
+Table of Contents:
+------------------
+1.0) Installation
+ * 1.1 3DSX installation
+ * 1.2 CIA installation
+ * 1.3 Additional files
+
+2.0) Controls
+ * 2.1 Default key mappings
+ * 2.2 Hover mode
+ * 2.3 Drag mode
+
+3.0) Supported Games
+
+4.0) Compiling
+ * 4.1 Prerequisites
+ * * 4.1.1 Compiling third-party libraries
+ * * 4.1.2 Manually setting up the environment
+ * * 4.1.3 Note on FLAC
+ * 4.2 Compiling ScummVM
+ * 4.3 Warning for build sizes
+
+1.0) Installation
+-----------------
+There are two possible formats to be used: 3DSX and CIA.
+The 3DSX format is considered more ethical because it does not make use of
+invalid title IDs, which get logged. It is also compatible with homebrew loading
+methods that do not involve CFW.
+The 3DSX format is exclusively used by the Homebrew Launcher and its derivatives.
+The CIA format can be installed directly to the 3DS home menu and can be launched
+using any CFW (Custom Firmware) of your choice.
+
+Installing the Homebrew Launcher or any CFW is beyond the scope of this README.
+
+1.1) 3DSX installation
+----------------
+You need to merely extract the ScummVM 3DSX files to your SD card so that all
+files reside in the `/3ds/scummvm/` directory. It can then be launched by Homebrew Launcher
+or a similar implementation.
+
+1.2) CIA installation
+---------------------
+The CIA format requires a DSP binary dump saved on your SD card as `/3ds/dspfirm.cdc`
+for proper audio support. You can search online to find software to dump this.
+Not having this file will cause many problems with games that need audio, sometimes
+even crashing, so this is NOT considered optional.
+
+Using any CIA installation software (search elsewhere for that), you need to install
+the `scummvm.cia` file. Then, just like what is done with the 3DSX installation, you
+need to extract all ScummVM 3DS files (`scummvm.cia` excluded) to the root of your SD
+card so that all files reside in the `/3ds/scummvm/` directory.
+
+1.3) Additional files
+---------------------
+In order to use the Virtual Keyboard, you need to get the:
+`backends/vkeybd/packs/vkeybd_zmall.zip` file from ScummVM's repository, and
+place it on your SD card, in the `/3ds/scummvm/kb` folder.
+
+In case you want a translated GUI, you need to get the:
+`scummvm/gui/themes/translations.dat` file from ScummVM's repository, and place
+it on your SD card, in the `/3ds/scummvm/themes` folder.
+
+2.0) Controls
+-------------
+
+2.1) Default key mappings
+-------------------------
+The D-Pad and A/B/X/Y buttons have mirrored usage. So they do the same things
+depending on if you're right or left-handed.
+
+| Buttons | Function |
+|------------|--------------------------------|
+| A / D-left | Left-click |
+| X / D-up | Right-click |
+| B / D-down | ESC (skips cutscenes and such) |
+| L | Use virtual keyboard |
+| R | Toggle hover/drag modes |
+| Start | Open game menu |
+| Select | Open 3DS config menu |
+| Circle Pad | Move the cursor |
+
+2.2) Hover mode
+---------------
+When you use the touchscreen, you are simulating the mere moving of the mouse. You
+can click only with taps, meaning it is impossible to drag stuff or hold down a
+mouse button without using buttons mapped to right/left-click.
+
+2.3) Drag mode
+--------------
+Every time you touch and release the touchscreen, you are simulating the click and
+release of the mouse buttons. At the moment, this is only a left-click.
+
+3.0) Supported Games
+--------------------
+The full game engine compatibility list can be found here:
+http://scummvm.org/compatibility/
+
+While all the above games should run on the 3DS (report if they do not), there are
+many games which are unplayable due to the lack of CPU speed on the 3DS. So if
+you play any games that run really slow, this is not considered a bug, but rather
+a hardware limitation. Though possible GPU optimizations are always in the works.
+The New 3DS console has much better performance, but there are still many newer and
+high-resolution games that cannot be played. A list of these unplayable games and
+game engines will eventually be listed here.
+
+4.0) Compiling
+--------------
+4.1) Prerequisites
+------------------
+ - Latest version of devkitPro, which comes with devkitARM and `libctru`
+ - `citro3d` thorugh devkitPro's pacman
+ - Optional: You should compile third-party libraries for the 3ds (commonly referred
+ to as portlibs in the devkitPRO community). Some games requires these to operate
+ properly.
+
+
+4.1.1) Compiling third-party libraries
+--------------------------------------
+It is strongly recommended that you use devkitPro's pacman in order to get the most recent
+portlibs for your build.
+
+The following libraries can be downloaded with pacman:
+
+| Library | Package |
+----------------|------------------------
+| zlib | 3ds-zlib |
+| libpng | 3ds-zlib |
+| libjpeg | 3ds-libjpeg-turbo |
+| freetype2 | 3ds-freetype |
+| libmad | 3ds-libmad |
+| libogg | 3ds-libogg |
+| tremor | 3ds-libvorbisidec |
+
+At the moment of writing, `faad` and `flac` are not in the devkitPro 3DS pacman
+repository. They can be compiled by following the instructions in the section below,
+in case they cannot be found through pacman.
+
+The following pacman packages are also recommended:
+ - `3ds-dev`
+ - `devkitpro-pkgbuild-helpers`
+
+Once you have the `devkitpro-pkgbuild-helpers` package, you should be able to find
+the following scripts in your `/opt/devkitpro` folder:
+ - `devkitarm.sh`
+ - `3dsvars.sh`
+
+Execute them one after the other (`devkitarm.sh` should be executed first), in order
+to setup your environment variables for cross-compiling.
+
+After that, you can download the libraries you want to cross compile, run any autoconf
+scripts that they may have, and then they can usually be built with the following steps
+from their source directory:
+```
+ $ mkdir -p $PORTLIBS
+ $ ./configure --prefix=$PORTLIBS --host=arm-none-eabi --disable-shared \
+ --enable-static
+ $ make
+ $ make install
+```
+Most libraries used can be compiled with same commands and configuration flags.
+
+4.1.2) Manually setting up the environment
+------------------------------------------
+In case you don't have the helpers package downloaded, you can use the following to set-up
+your environment variables.
+
+It is assumed that you have these variables already set up. If not, then do so:
+ - DEVKITPRO Your root devkitPro directory
+ - DEVKITARM Your root devkitARM directory (probably same as $DEVKITPRO/devkitARM)
+ - CTRULIB Your root libctru directory (probably same as $DEVKITPRO/libctru)
+
+In the source directory of the library:
+```
+ $ export PORTLIBS=$DEVKITPRO/portlibs/3ds
+ $ export PATH=$DEVKITARM/bin:$PATH
+ $ export PKG_CONFIG_PATH=$PORTLIBS/lib/pkgconfig
+ $ export PKG_CONFIG_LIBDIR=$PORTLIBS/lib/pkgconfig
+ $ export CFLAGS="-g -march=armv6k -mtune=mpcore -mfloat-abi=hard -O2
+ -mword-relocations -ffunction-sections -fdata-sections"
+ $ export CPPFLAGS="-I$PORTLIBS/include -I$CTRULIB/include"
+ $ export LDFLAGS="-L$PORTLIBS/lib"
+ ```
+
+4.1.3) Note on FLAC:
+--------------------
+At the moment of writing, the `libflac` library cannot be compiled for the 3DS out of the box.
+However, the following patch (for the Nintendo Switch) can be adapted and applied to it:
+https://github.com/devkitPro/pacman-packages/tree/master/switch/flac
+
+Afterwards, the library can be built with:
+```
+ $ CFLAGS="${CFLAGS} -D__3DS__ " \
+ ./configure --prefix="${PORTLIBS_PREFIX}" --host=arm-none-eabi \
+ --disable-shared --enable-static \
+ --disable-xmms-plugin --disable-cpplibs \
+ --disable-sse --without-ogg
+```
+
+4.2) Compiling ScummVM
+----------------------
+From the root of the scummvm repository:
+```
+ $ ./configure --host=3ds
+ $ make
+```
+Additionally compile to specific formats to be used on the 3DS:
+```
+ $ make scummvm.3dsx
+ $ make scummvm.cia
+```
+Assuming everything was successful, you'll be able to find the binary
+files in the root of your scummvm folder.
+
+Note: for the CIA format, you will need the 'makerom' and 'bannertool' tools which are
+not supplied with devkitPro.
+
+4.3) Warning for build sizes
+---------------------------
+The above configuration command will include all game engines by default and will
+likely be too massive to run with stability using either the 3DSX or the CIA format.
+Until dynamic modules are figured out, you should configure engines like this:
+```
+ $ ./configure --host=3ds --disable-all-engines--enable-engine=scumm-7-8,myst,riven, \
+ sword1,sword2,sword25,sci,lure,sky,agi,agos
+```
+Choose whatever engines you want, but if the ELF's .text section exceeds ~10MB-12MB,
+you may experience crashes in memory-intensive games such as COMI, Broken Sword and Discworld 2.