Merge branch 'JustEnoughLinuxOS:main' into gliden64test

This commit is contained in:
Nick Ricciuti 2022-09-25 11:44:50 -04:00 committed by GitHub
commit 8b777776ad
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
438 changed files with 33274 additions and 5215 deletions

1
.gitignore vendored
View file

@ -54,5 +54,6 @@ packages/sx05re/experimental/
release/ release/
.lastbuild .lastbuild
.jelos
SOURCES SOURCES

View file

@ -23,14 +23,14 @@ distclean:
src-pkg: src-pkg:
tar cvJf sources.tar.xz sources .stamps tar cvJf sources.tar.xz sources .stamps
world: RG552 RG503 RG353P RG351P RG351V RG351MP world: RG552 RG503 RG353P RG351P RG351V RG351MP handheld
X86_64: handheld:
PROJECT=PC DEVICE=X86_64 ARCH=x86_64 ./scripts/build_distro DEVICE_ROOT=handheld PROJECT=PC DEVICE=handheld ARCH=x86_64 ./scripts/build_distro
RG552: RG552:
PROJECT=Rockchip DEVICE=RG552 ARCH=arm ./scripts/build_distro DEVICE_ROOT=RG552 PROJECT=Rockchip DEVICE=RG552 ARCH=arm ./scripts/build_distro
PROJECT=Rockchip DEVICE=RG552 ARCH=aarch64 ./scripts/build_distro DEVICE_ROOT=RG552 PROJECT=Rockchip DEVICE=RG552 ARCH=aarch64 ./scripts/build_distro
RG503: RG503:
DEVICE_ROOT=RG503 PROJECT=Rockchip DEVICE=RG503 ARCH=arm ./scripts/build_distro DEVICE_ROOT=RG503 PROJECT=Rockchip DEVICE=RG503 ARCH=arm ./scripts/build_distro

View file

@ -1,15 +1,15 @@
&nbsp;&nbsp;<img src="https://raw.githubusercontent.com/JustEnoughLinuxOS/distribution/dev/distributions/JELOS/logos/jelos-logo.png" width=192>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[![Latest Version](https://img.shields.io/github/release/JustEnoughLinuxOS/distribution.svg?color=5998FF&label=latest%20version&style=flat-square)](https://github.com/JustEnoughLinuxOS/distribution/releases/latest) [![Activity](https://img.shields.io/github/commit-activity/m/JustEnoughLinuxOS/distribution?color=5998FF&style=flat-square)](https://github.com/JustEnoughLinuxOS/distribution/commits) [![Pull Requests](https://img.shields.io/github/issues-pr-closed/JustEnoughLinuxOS/distribution?color=5998FF&style=flat-square)](https://github.com/JustEnoughLinuxOS/distribution/pulls) [![Discord Server](https://img.shields.io/discord/948029830325235753?color=5998FF&label=chat&style=flat-square)](https://discord.gg/seTxckZjJy) &nbsp;&nbsp;<img src="https://raw.githubusercontent.com/JustEnoughLinuxOS/distribution/dev/distributions/JELOS/logos/jelos-logo.png" width=192>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[![Latest Version](https://img.shields.io/github/release/JustEnoughLinuxOS/distribution.svg?color=5998FF&label=latest%20version&style=flat-square)](https://github.com/JustEnoughLinuxOS/distribution/releases/latest) [![Activity](https://img.shields.io/github/commit-activity/m/JustEnoughLinuxOS/distribution?color=5998FF&style=flat-square)](https://github.com/JustEnoughLinuxOS/distribution/commits) [![Pull Requests](https://img.shields.io/github/issues-pr-closed/JustEnoughLinuxOS/distribution?color=5998FF&style=flat-square)](https://github.com/JustEnoughLinuxOS/distribution/pulls) [![Discord Server](https://img.shields.io/discord/948029830325235753?color=5998FF&label=chat&style=flat-square)](https://discord.gg/seTxckZjJy)
# #
Just Enough Linux Operating System (JELOS) is a simple Linux distribution for ARM based devices that specializes in handhelds. My goal is to build an operating system that has the features and capabilities that I need, and to have fun building it. Just Enough Linux Operating System (JELOS) is a community developed Linux distribution for handheld gaming devices. Our goal is to produce an operating system that has the features and capabilities that we need, and to have fun as we develop it.
## Features ## Features
* A 64bit Linux Operating System. * A 64bit Linux Operating System.
* An easy to use interface using EmulationStation * An easy to use interface using EmulationStation
* Provides RetroArch, a variety of cores, Stand Alone Emulators, PortMaster, and ThemeMaster. * Provides RetroArch, a variety of cores, Stand Alone Emulators, PortMaster, and ThemeMaster.
* Supports FAT32, ExFAT, and EXT4 file systems on devices with a second card slot. * Supports FAT32, ExFAT, and EXT4 file systems on removable storage (slot/device #2).
* 2.4GHz and 5GHz 802.11 A/B/G/N/AC WIFI support. * 2.4GHz and 5GHz 802.11 A/B/G/N/AC WIFI support.
* Online updates for easy access to stable or development builds. * Online update capability for easy access to stable or development builds.
* Supports Anbernic's RG552, RG503, RG353P, RG351P/M, RG351MP, and RG351V. * Support for the Anbernic WIN600, RG552, RG503, RG353P, RG351P/M, RG351MP, RG351V.
* Developed by a small, friendly community. * Developed by a small, friendly community.
## Licenses ## Licenses
@ -42,13 +42,16 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
## Installation ## Flashing
* Download the latest [version of JELOS](https://github.com/JustEnoughLinuxOS/distribution/releases) (.img.gz) for your device. * Download the latest [version of JELOS](https://github.com/JustEnoughLinuxOS/distribution/releases) (.img.gz) for your device.
* Decompress the image. * Decompress the image.
* Write the image to an SDCARD using an imaging tool. Common imaging tools include [Balena Etcher](https://www.balena.io/etcher/), [Raspberry Pi Imager](https://www.raspberrypi.com/software/), and [Win32 Disk Imager](https://sourceforge.net/projects/win32diskimager/). If you're skilled with the command line, dd works fine too. * Write the image to an SDCARD using an imaging tool. Common imaging tools include [Balena Etcher](https://www.balena.io/etcher/), [Raspberry Pi Imager](https://www.raspberrypi.com/software/), and [Win32 Disk Imager](https://sourceforge.net/projects/win32diskimager/). If you're skilled with the command line, dd works fine too.
> This repository hosts stable versions of JELOS. If you would like to install the unstable development version, please visit the [development build repository](https://github.com/JustEnoughLinuxOS/distribution-dev). > This repository hosts stable versions of JELOS. If you would like to install the unstable development version, please visit the [development build repository](https://github.com/JustEnoughLinuxOS/distribution-dev).
## Installation
* x86_64 versions of JELOS include an installation tool. This tool may be run from the boot menu or from within JELOS by switching to desktop mode and running "installer" in a terminal.
## Upgrading ## Upgrading
* Download and install the update online via the System Settings menu. * Download and install the update online via the System Settings menu.
* Download the latest [version of JELOS](https://github.com/JustEnoughLinuxOS/distribution/releases) (.tar) for your device. * Download the latest [version of JELOS](https://github.com/JustEnoughLinuxOS/distribution/releases) (.tar) for your device.
@ -56,7 +59,7 @@ limitations under the License.
* Reboot the device, and the update will begin automatically. * Reboot the device, and the update will begin automatically.
## Network Access ## Network Access
* The username for ssh and samba access is "root". The root password is generated during every boot, it can be found in the System Settings menu. * External services are disabled by default in stable builds. When enabled, the username for ssh and samba access is "root". The root password is generated during every boot, it can be found in the System Settings menu.
## RetroArch Hotkeys ## RetroArch Hotkeys
* Hotkey Enable: Select (Hold) * Hotkey Enable: Select (Hold)

View file

@ -545,7 +545,7 @@ debug_strip() {
fi fi
if [ "${BUILD_WITH_DEBUG}" != "yes" ] && flag_enabled "strip" "yes"; then if [ "${BUILD_WITH_DEBUG}" != "yes" ] && flag_enabled "strip" "yes"; then
find $* -type f -executable | xargs $STRIP 2>/dev/null || : find $* -type f \( -executable ! -iname "*.AppImage" \) | xargs $STRIP 2>/dev/null || :
fi fi
} }

View file

@ -27,7 +27,7 @@ DISTRO="${DISTRO:-JELOS}"
PROJECT="${PROJECT:-Rockchip}" PROJECT="${PROJECT:-Rockchip}"
# determines TARGET_ARCH, if not forced by user # determines TARGET_ARCH, if not forced by user
ARCH="${ARCH:-arm}" ARCH="${ARCH:-aarch64}"
TARGET_ARCH="${ARCH}" TARGET_ARCH="${ARCH}"
# include helper functions # include helper functions
@ -84,13 +84,18 @@ VERBOSE="${VERBOSE:-yes}"
CCACHE_CACHE_SIZE="20G" CCACHE_CACHE_SIZE="20G"
# read local persistent options from $ROOT if available # read local persistent options from $ROOT if available
if [ -f "${ROOT}/.coreelec/options" ]; then if [ -f "${ROOT}/.jelos/options" ]; then
. "${ROOT}/.coreelec/options" . "${ROOT}/.jelos/options"
fi fi
# read global persistent options from $HOME if available # read global persistent options from $HOME if available
if [ -f "${HOME}/.coreelec/options" ]; then if [ -f "${HOME}/.jelos/options" ]; then
. "${HOME}/.coreelec/options" . "${HOME}/.jelos/options"
fi
# read global persistent options from ${DOCKER_WORK_DIR} if available
if [ -f "${DOCKER_WORK_DIR}/.jelos/options" ]; then
. "${DOCKER_WORK_DIR}/.jelos/options"
fi fi
# overwrite OEM_SUPPORT via commandline # overwrite OEM_SUPPORT via commandline

View file

@ -1,16 +0,0 @@
# INTEL HBR WORKAROUND FOR DTS-MA & Dolby TrueHD PLAYBACK
# Uncomment the following lines to disable any S/PDIF out to deliver
# bitstreamed audio on Intel builds. This is a rough workaround for
# users that have both S/PDIF and HDMI audio outputs on their motherboard
# or motherboard+discrete graphics combo.
# EVEN IF YOU ARE NOT USING THE S/PDIF OUTPUT
# but still have one, you will need to uncomment the lines below !
# after uncommenting these lines, you must reboot for these settings to take effect
# blacklist snd_hda_codec_realtek
# blacklist snd_hda_codec_sigmatel
# blacklist snd_hda_codec_cirrus

View file

@ -9,14 +9,14 @@ options saa7134-alsa index=-2
options snd-atiixp-modem index=-2 options snd-atiixp-modem index=-2
options snd-intel8x0m index=-2 options snd-intel8x0m index=-2
options snd-via82xx-modem index=-2 options snd-via82xx-modem index=-2
options snd-usb-audio index=-2
options snd-usb-usx2y index=-2 options snd-usb-usx2y index=-2
options snd-usb-caiaq index=-2 options snd-usb-caiaq index=-2
options snd-cmipci mpu_port=0x330 fm_port=0x388 options snd-cmipci mpu_port=0x330 fm_port=0x388
# Some Toshiba laptops might require this # Some Toshiba laptops might require this
# options snd-hda-intel model=toshiba # options snd-hda-intel model=toshiba
options snd-hda-intel model=auto
options snd-hda-intel model=auto index=1,2
# RG552 shouldn't grab index 0 # RG552 shouldn't grab index 0
options dw_hdmi_i2s_audio index=1 options dw_hdmi_i2s_audio index=1

View file

@ -28,9 +28,3 @@ post_configure_target() {
sed -i 's/.*PKGLIBDIR.*/#define PKGLIBDIR ""/' include/config.h sed -i 's/.*PKGLIBDIR.*/#define PKGLIBDIR ""/' include/config.h
} }
post_makeinstall_target() {
rm -rf ${INSTALL}/usr/bin
mkdir -p ${INSTALL}/usr/config
cp -PR ${PKG_DIR}/config/modprobe.d ${INSTALL}/usr/config
}

View file

@ -0,0 +1,10 @@
# SPDX-License-Identifier: Apache-2.0
# Copyright (C) 2020-present Fewtarius
PKG_NAME="soundtouch"
PKG_VERSION="2.3.1"
PKG_LICENSE="LGPL-2.1+"
PKG_SITE="https://www.surina.net/soundtouch"
PKG_URL="https://codeberg.org/soundtouch/soundtouch/archive/${PKG_VERSION}.tar.gz"
PKG_DEPENDS_TARGET="toolchain"
PKG_LONGDESC="SoundTouch Audio Processing Library"

View file

@ -14,9 +14,8 @@ makeinstall_target() {
cd ${PKG_BUILD} cd ${PKG_BUILD}
LIBROOT="${ROOT}/build.${DISTRO}-${DEVICE}.arm/image/system/" LIBROOT="${ROOT}/build.${DISTRO}-${DEVICE}.arm/image/system/"
if [ "${ARCH}" = "aarch64" ]; then if [ "${ARCH}" = "aarch64" ]; then
mkdir -p ${INSTALL}/usr/lib32/pulseaudio mkdir -p ${INSTALL}/usr/lib32
rsync -l ${LIBROOT}/usr/lib/* ${INSTALL}/usr/lib32 >/dev/null 2>&1 rsync -al ${LIBROOT}/usr/lib/* ${INSTALL}/usr/lib32 >/dev/null 2>&1
rsync -l ${LIBROOT}/usr/lib/pulseaudio/* ${INSTALL}/usr/lib32/pulseaudio >/dev/null 2>&1
chmod -f +x ${INSTALL}/usr/lib32/* || : chmod -f +x ${INSTALL}/usr/lib32/* || :
fi fi
mkdir -p ${INSTALL}/usr/lib mkdir -p ${INSTALL}/usr/lib
@ -25,4 +24,8 @@ makeinstall_target() {
mkdir -p "${INSTALL}/etc/ld.so.conf.d" mkdir -p "${INSTALL}/etc/ld.so.conf.d"
echo "/usr/lib32" > "${INSTALL}/etc/ld.so.conf.d/arm-lib32.conf" echo "/usr/lib32" > "${INSTALL}/etc/ld.so.conf.d/arm-lib32.conf"
echo "/usr/lib32/pulseaudio" >"${INSTALL}/etc/ld.so.conf.d/arm-lib32-pulseaudio.conf" echo "/usr/lib32/pulseaudio" >"${INSTALL}/etc/ld.so.conf.d/arm-lib32-pulseaudio.conf"
if [ -d "${LIBROOT}/usr/lib/dri" ]
then
echo "/usr/lib32/dri" >"${INSTALL}/etc/ld.so.conf.d/arm-lib32-dri.conf"
fi
} }

View file

@ -3,18 +3,9 @@
# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv) # Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv)
PKG_NAME="libzip" PKG_NAME="libzip"
PKG_VERSION="0.11.2" PKG_VERSION="1.9.2"
PKG_SHA256="7cfbbc2c540e154b933b6e9ec781e2671086bd8114eb744ae1a1ade34d2bb6bb"
PKG_LICENSE="GPL" PKG_LICENSE="GPL"
PKG_SITE="http://www.nih.at/libzip/" PKG_SITE="https://libzip.org/download"
PKG_URL="http://www.nih.at/libzip/${PKG_NAME}-${PKG_VERSION}.tar.xz" PKG_URL="${PKG_SITE}/${PKG_NAME}-${PKG_VERSION}.tar.xz"
PKG_DEPENDS_TARGET="toolchain zlib" PKG_DEPENDS_TARGET="toolchain zlib"
PKG_LONGDESC="A C library for reading, creating, and modifying zip archives." PKG_LONGDESC="A C library for reading, creating, and modifying zip archives."
PKG_TOOLCHAIN="configure"
PKG_CONFIGURE_OPTS_TARGET="--disable-shared --enable-static"
post_makeinstall_target() {
rm -rf $INSTALL/usr/bin
rm -rf $INSTALL/usr/lib
}

View file

@ -2,8 +2,7 @@
# Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv) # Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv)
PKG_NAME="zlib" PKG_NAME="zlib"
PKG_VERSION="1.2.11" PKG_VERSION="1.2.12"
PKG_SHA256="4ff941449631ace0d4d203e3483be9dbc9da454084111f97ea0a2114e19bf066"
PKG_LICENSE="OSS" PKG_LICENSE="OSS"
PKG_SITE="http://www.zlib.net" PKG_SITE="http://www.zlib.net"
PKG_URL="http://zlib.net/${PKG_NAME}-${PKG_VERSION}.tar.xz" PKG_URL="http://zlib.net/${PKG_NAME}-${PKG_VERSION}.tar.xz"

View file

@ -3,15 +3,21 @@
PKG_NAME="libunwind" PKG_NAME="libunwind"
PKG_VERSION="1.6.2" PKG_VERSION="1.6.2"
PKG_SHA256="4a6aec666991fb45d0889c44aede8ad6eb108071c3554fcdff671f9c94794976"
PKG_LICENSE="GPL" PKG_LICENSE="GPL"
PKG_SITE="http://www.nongnu.org/libunwind/" PKG_SITE="http://www.nongnu.org/libunwind/"
PKG_URL="http://download.savannah.nongnu.org/releases/libunwind/libunwind-${PKG_VERSION}.tar.gz" PKG_URL="http://download.savannah.nongnu.org/releases/libunwind/libunwind-${PKG_VERSION}.tar.gz"
PKG_DEPENDS_TARGET="gcc:host" PKG_DEPENDS_TARGET="toolchain zlib"
PKG_LONGDESC="library to determine the call-chain of a program" PKG_LONGDESC="library to determine the call-chain of a program"
PKG_BUILD_FLAGS="+pic"
PKG_TOOLCHAIN="autotools"
PKG_CONFIGURE_OPTS_TARGET="--enable-static \ PKG_CONFIGURE_OPTS_TARGET="--enable-static \
--disable-shared" --disable-shared \
--disable-minidebuginfo \
--disable-documentation \
--disable-tests"
makeinstall_target() { makeinstall_target() {
make DESTDIR=$SYSROOT_PREFIX install make DESTDIR=${SYSROOT_PREFIX} install
} }

View file

@ -0,0 +1,26 @@
From f40db1e2562934fd21485ba7f62e4521945f17e4 Mon Sep 17 00:00:00 2001
From: MilhouseVH <milhouseVH.github@nmacleod.com>
Date: Mon, 17 Feb 2020 05:52:10 +0000
Subject: [PATCH] fix multiple definition
https://lists.nongnu.org/archive/html/libunwind-devel/2017-08/msg00039.html
https://github.com/libunwind/libunwind/commit/0e74e583ae18d6852835f327921ee130a5fa3e6f
---
include/tdep-arm/ex_tables.h | 1 +
1 file changed, 1 insertion(+)
diff --git a/include/tdep-arm/ex_tables.h b/include/tdep-arm/ex_tables.h
index 9df5e0a..0b5388a 100644
--- a/include/tdep-arm/ex_tables.h
+++ b/include/tdep-arm/ex_tables.h
@@ -47,6 +47,7 @@ struct arm_exbuf_data
#define arm_exidx_extract UNW_OBJ(arm_exidx_extract)
#define arm_exidx_decode UNW_OBJ(arm_exidx_decode)
#define arm_exidx_apply_cmd UNW_OBJ(arm_exidx_apply_cmd)
+#define arm_search_unwind_table UNW_OBJ(arm_search_unwind_table)
int arm_exidx_extract (struct dwarf_cursor *c, uint8_t *buf);
int arm_exidx_decode (const uint8_t *buf, uint8_t len, struct dwarf_cursor *c);
--
2.7.4

View file

@ -0,0 +1,10 @@
--- a/src/unwind/libunwind.pc.in 2020-11-10 16:14:18.000000000 +0000
+++ b/src/unwind/libunwind.pc.in 2021-12-05 08:16:04.467881118 +0000
@@ -6,6 +6,6 @@
Name: libunwind
Description: libunwind base library
Version: @VERSION@
-Libs: -L${libdir} -lunwind
+Libs: -L${libdir} -lunwind @LIBLZMA@ @LIBZ@
Libs.private: @LIBLZMA@ @LIBZ@
Cflags: -I${includedir}

View file

@ -0,0 +1,11 @@
# SPDX-License-Identifier: GPL-2.0
# Copyright (C) 2022-present Team LibreELEC (https://libreelec.tv)
PKG_NAME="asn1c"
PKG_VERSION="0.9.28"
PKG_SHA256="8007440b647ef2dd9fb73d931c33ac11764e6afb2437dbe638bb4e5fc82386b9"
PKG_LICENSE="BSD"
PKG_SITE="http://lionet.info/asn1c/blog/"
PKG_URL="https://github.com/vlm/asn1c/releases/download/v${PKG_VERSION}/${PKG_NAME}-${PKG_VERSION}.tar.gz"
PKG_DEPENDS_HOST="ccache:host"
PKG_LONGDESC="The ASN.1 Compiler"

View file

@ -0,0 +1,56 @@
From f6ca3217ec2fad93d078fa0121aa8f88d7d12ccb Mon Sep 17 00:00:00 2001
From: lualiliu <lualiliu@outlook.com>
Date: Wed, 7 Sep 2022 10:57:49 +0800
Subject: [PATCH] Add a patch about fakeroot(_STAT_VER undeclared)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
solve it:
libfakeroot.c:99:40: error: _STAT_VER undeclared (first use in this
function)
---
...fine-_STAT_VER-if-not-already-define.patch | 34 +++++++++++++++++++
1 file changed, 34 insertions(+)
create mode 100644 packages/devel/fakeroot/patches/0001-libfakeroot.c-define-_STAT_VER-if-not-already-define.patch
diff --git a/packages/devel/fakeroot/patches/0001-libfakeroot.c-define-_STAT_VER-if-not-already-define.patch b/packages/devel/fakeroot/patches/0001-libfakeroot.c-define-_STAT_VER-if-not-already-define.patch
new file mode 100644
index 00000000..613d0c95
--- /dev/null
+++ b/packages/devel/fakeroot/patches/0001-libfakeroot.c-define-_STAT_VER-if-not-already-define.patch
@@ -0,0 +1,34 @@
+From ca68c7336dea4a07cf5b77c1fdc9e9aee4984ca5 Mon Sep 17 00:00:00 2001
+From: Ilya Lipnitskiy <ilya.lipnitskiy@gmail.com>
+Date: Thu, 11 Feb 2021 20:59:25 -0800
+Subject: [PATCH 1/3] libfakeroot.c: define _STAT_VER if not already defined
+
+Signed-off-by: Ilya Lipnitskiy <ilya.lipnitskiy@gmail.com>
+---
+ libfakeroot.c | 10 ++++++++++
+ 1 file changed, 10 insertions(+)
+
+diff --git a/libfakeroot.c b/libfakeroot.c
+index 3e80e38..14cdbc4 100644
+--- a/libfakeroot.c
++++ b/libfakeroot.c
+@@ -90,6 +90,16 @@
+ #define SEND_GET_XATTR64(a,b,c) send_get_xattr64(a,b)
+ #endif
+
++#ifndef _STAT_VER
++ #if defined (__aarch64__)
++ #define _STAT_VER 0
++ #elif defined (__x86_64__)
++ #define _STAT_VER 1
++ #else
++ #define _STAT_VER 3
++ #endif
++#endif
++
+ /*
+ These INT_* (which stands for internal) macros should always be used when
+ the fakeroot library owns the storage of the stat variable.
+--
+2.30.1
+

View file

@ -4,7 +4,6 @@
PKG_NAME="glib" PKG_NAME="glib"
PKG_VERSION="2.71.0" PKG_VERSION="2.71.0"
PKG_SHA256="926816526f6e4bba9af726970ff87be7dac0b70d5805050c6207b7bb17ea4fca"
PKG_LICENSE="LGPL" PKG_LICENSE="LGPL"
PKG_SITE="https://www.gtk.org/" PKG_SITE="https://www.gtk.org/"
PKG_URL="https://download.gnome.org/sources/glib/$(get_pkg_version_maj_min)/${PKG_NAME}-${PKG_VERSION}.tar.xz" PKG_URL="https://download.gnome.org/sources/glib/$(get_pkg_version_maj_min)/${PKG_NAME}-${PKG_VERSION}.tar.xz"
@ -13,7 +12,7 @@ PKG_DEPENDS_TARGET="toolchain pcre zlib libffi Python3:host util-linux"
PKG_LONGDESC="A library which includes support routines for C such as lists, trees, hashes, memory allocation." PKG_LONGDESC="A library which includes support routines for C such as lists, trees, hashes, memory allocation."
PKG_TOOLCHAIN="meson" PKG_TOOLCHAIN="meson"
PKG_MESON_OPTS_HOST="-Ddefault_library=static \ PKG_MESON_OPTS_HOST="-Ddefault_library=shared \
-Dinstalled_tests=false \ -Dinstalled_tests=false \
-Dlibmount=disabled \ -Dlibmount=disabled \
-Dtests=false" -Dtests=false"
@ -21,7 +20,6 @@ PKG_MESON_OPTS_HOST="-Ddefault_library=static \
PKG_MESON_OPTS_TARGET="-Ddefault_library=shared \ PKG_MESON_OPTS_TARGET="-Ddefault_library=shared \
-Dinstalled_tests=false \ -Dinstalled_tests=false \
-Dselinux=disabled \ -Dselinux=disabled \
-Dfam=false \
-Dxattr=true \ -Dxattr=true \
-Dgtk_doc=false \ -Dgtk_doc=false \
-Dman=false \ -Dman=false \

View file

@ -13,12 +13,12 @@ PKG_DEPENDS_INIT="glibc"
PKG_LONGDESC="The Glibc package contains the main C library." PKG_LONGDESC="The Glibc package contains the main C library."
PKG_BUILD_FLAGS="-gold" PKG_BUILD_FLAGS="-gold"
case "${TARGET_ARCH}" in case "${DEVICE}" in
arm|aarch64) RG351P|RG351V|RG351MP|RG503|RG353P)
OPT_ENABLE_KERNEL=4.4.0 OPT_ENABLE_KERNEL=4.4.0
;; ;;
*) *)
OPT_ENABLE_KERNEL=5.10.0 OPT_ENABLE_KERNEL=5.15.0
;; ;;
esac esac

View file

@ -0,0 +1,80 @@
# SPDX-License-Identifier: GPL-2.0-or-later
# Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv)
# Copyright (C) 2017-present Team LibreELEC (https://libreelec.tv)
# Copyright (C) 2020-present Team CoreELEC (https://coreelec.org)
PKG_NAME="gobject-introspection"
PKG_VERSION="1.72.0"
PKG_SHA256="07c30d7f465dabd861c03a950430343e976d445179ad451a4dd1b17329e1cbae"
PKG_ARCH="any"
PKG_LICENSE="LGPL"
PKG_SITE="http://www.gtk.org/"
PKG_URL="https://github.com/GNOME/$PKG_NAME/archive/$PKG_VERSION.tar.gz"
PKG_DEPENDS_TARGET="toolchain libffi glib Python3 qemu:host gobject-introspection:host"
PKG_DEPENDS_HOST="libffi:host glib:host"
PKG_SECTION="devel"
PKG_SHORTDESC="glib: C support library"
PKG_LONGDESC="GLib is a library which includes support routines for C such as lists, trees, hashes, memory allocation, and many other things."
PKG_TOOLCHAIN="meson"
pre_configure_host() {
PKG_MESON_OPTS_HOST="-Ddoctool=disabled"
# prevent g-ir-scanner from writing cache data to $HOME
export GI_SCANNER_DISABLE_CACHE="1"
}
pre_configure_target() {
GLIBC_DYNAMIC_LINKER="$(ls ${SYSROOT_PREFIX}/usr/lib/ld-linux-*.so.*)"
QEMU_BINARY="${TOOLCHAIN}/bin/qemu-${TARGET_ARCH}"
PKG_CONFIG_PATH="${SYSROOT_PREFIX}/usr/lib/pkgconfig"
# for gi this variables must be defined for target and not for host
# because they are used in
# toolchain/lib/gobject-introspection/giscanner/ccompiler.py
CC="${TARGET_CC}"
CXX="${TARGET_CXX}"
AR="${TARGET_AR}"
CPP="${TARGET_PREFIX}cpp"
CPPFLAGS="${TARGET_CPPFLAGS}"
CFLAGS="${TARGET_CFLAGS}"
LDFLAGS="${TARGET_LDFLAGS}"
PKG_MESON_OPTS_TARGET=" \
-Ddoctool=disabled \
-Dpython=${TOOLCHAIN}/bin/${PKG_PYTHON_VERSION} \
-Dgi_cross_use_prebuilt_gi=true \
-Dgi_cross_binary_wrapper=${TOOLCHAIN}/bin/g-ir-scanner-binary-wrapper \
-Dgi_cross_ldd_wrapper=${TOOLCHAIN}/bin/g-ir-scanner-ldd-wrapper \
-Dbuild_introspection_data=true"
# prevent g-ir-scanner from writing cache data to $HOME
export GI_SCANNER_DISABLE_CACHE="1"
# write out a qemu wrapper that will be given to gi-scanner
# so that it can run target helper binaries through that
cat > ${TOOLCHAIN}/bin/g-ir-scanner-binary-wrapper << EOF
#!/bin/sh
${QEMU_BINARY} \
-E LD_LIBRARY_PATH="${SYSROOT_PREFIX}/usr/lib:${TOOLCHAIN}/${TARGET_NAME}/lib" \
-L ${SYSROOT_PREFIX}/usr \
"\$@"
EOF
# write out a wrapper to use instead of ldd, which does not
# work when a binary is built for a different architecture
cat > ${TOOLCHAIN}/bin/g-ir-scanner-ldd-wrapper << EOF
#!/bin/sh
${QEMU_BINARY} \
-E LD_LIBRARY_PATH="${SYSROOT_PREFIX}/usr/lib:${TOOLCHAIN}/${TARGET_NAME}/lib" \
${GLIBC_DYNAMIC_LINKER} --list "\$1"
EOF
chmod +x ${TOOLCHAIN}/bin/g-ir-scanner-*-wrapper
}
post_makeinstall_target() {
rm -rf ${INSTALL}/usr/bin
rm -rf ${INSTALL}/usr/lib/gobject-introspection
rm -rf ${INSTALL}/usr/share
}

View file

@ -3,12 +3,12 @@
# Copyright (C) 2018-present Team LibreELEC (https://libreelec.tv) # Copyright (C) 2018-present Team LibreELEC (https://libreelec.tv)
PKG_NAME="heimdal" PKG_NAME="heimdal"
PKG_VERSION="7.7.0" PKG_VERSION="c0bc8beb07d9733d4c8c17d120916552fe172f50"
PKG_SHA256="f7d414d0914abb0e151a276b4de22cf4977fd6c28bd9ecdd990407b1138a945c" PKG_SHA256="601e9a772063c72b391d593df8ae5e05ec779fefdf1502b7d88fbbe016ceb4dd"
PKG_LICENSE="BSD-3c" PKG_LICENSE="BSD-3c"
PKG_SITE="http://www.h5l.org/" PKG_SITE="http://www.h5l.org/"
PKG_URL="https://github.com/heimdal/heimdal/archive/${PKG_NAME}-${PKG_VERSION}.tar.gz" PKG_URL="https://github.com/heimdal/heimdal/archive/${PKG_VERSION}.tar.gz"
PKG_DEPENDS_HOST="toolchain:host Python3:host ncurses:host" PKG_DEPENDS_HOST="toolchain:host Python3:host ncurses:host asn1c:host"
PKG_LONGDESC="Kerberos 5, PKIX, CMS, GSS-API, SPNEGO, NTLM, Digest-MD5 and, SASL implementation." PKG_LONGDESC="Kerberos 5, PKIX, CMS, GSS-API, SPNEGO, NTLM, Digest-MD5 and, SASL implementation."
PKG_TOOLCHAIN="autotools" PKG_TOOLCHAIN="autotools"
PKG_BUILD_FLAGS="-parallel" PKG_BUILD_FLAGS="-parallel"

View file

@ -1,52 +0,0 @@
From 872222db35384f343a8a566a56a28c4eb73d38ed Mon Sep 17 00:00:00 2001
From: Damir Franusic <df@release14.org>
Date: Sun, 9 Dec 2018 19:50:47 +0100
Subject: [PATCH] AC_FIND_FUNC_NO_LIBS should check libtinfo for tgetent
---
configure.ac | 2 +-
lib/libedit/config.h.in | 3 +++
lib/libedit/configure.ac | 3 ++-
3 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/configure.ac b/configure.ac
index f1e8d7b15e..f98a3c555e 100644
--- a/configure.ac
+++ b/configure.ac
@@ -456,7 +456,7 @@ AC_FIND_FUNC_NO_LIBS(openpty, util,[
#endif
],[0,0,0,0,0])
-AC_FIND_FUNC_NO_LIBS(tgetent, termcap ncurses curses,[
+AC_FIND_FUNC_NO_LIBS(tgetent, termcap ncurses curses tinfo,[
#ifdef HAVE_TERMCAP_H
#include <termcap.h>
#endif
diff --git a/lib/libedit/config.h.in b/lib/libedit/config.h.in
index ba283cc39f..059e5abc6a 100644
--- a/lib/libedit/config.h.in
+++ b/lib/libedit/config.h.in
@@ -42,6 +42,9 @@
/* Define to 1 if you have the `ncurses' library (-lncurses). */
#undef HAVE_LIBNCURSES
+/* Define to 1 if you have the `tinfo' library (-ltinfo). */
+#undef HAVE_LIBTINFO
+
/* Define to 1 if you have the <limits.h> header file. */
#undef HAVE_LIMITS_H
diff --git a/lib/libedit/configure.ac b/lib/libedit/configure.ac
index 90c8ca57d7..89a9376b06 100644
--- a/lib/libedit/configure.ac
+++ b/lib/libedit/configure.ac
@@ -36,7 +36,8 @@ EL_MANTYPE
AC_CHECK_LIB(curses, tgetent,,
[AC_CHECK_LIB(ncurses, tgetent,,
- [AC_MSG_ERROR([libcurses or libncurses are required!])] )] )
+ [AC_CHECK_LIB(tinfo, tgetent,,
+ [AC_MSG_ERROR([libcurses or libncurses are required!])] )] )] )
# Checks for header files.

View file

@ -1,24 +0,0 @@
From 5e7bc8d8811fa401fa14adb9787504c0b460c7df Mon Sep 17 00:00:00 2001
From: Earl Chew <earl_chew@yahoo.com>
Date: Wed, 20 May 2020 09:46:28 -0700
Subject: [PATCH] [libedit/configure.ac] Refactor tgetent message to reflect
libraries searched
Signed-off-by: Earl Chew <earl_chew@yahoo.com>
---
lib/libedit/configure.ac | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lib/libedit/configure.ac b/lib/libedit/configure.ac
index 89a9376b06..b94bafc6b9 100644
--- a/lib/libedit/configure.ac
+++ b/lib/libedit/configure.ac
@@ -37,7 +37,7 @@ EL_MANTYPE
AC_CHECK_LIB(curses, tgetent,,
[AC_CHECK_LIB(ncurses, tgetent,,
[AC_CHECK_LIB(tinfo, tgetent,,
- [AC_MSG_ERROR([libcurses or libncurses are required!])] )] )] )
+ [AC_MSG_ERROR([libcurses, libncurses, or tinfo are required!])] )] )] )
# Checks for header files.

View file

@ -1,29 +0,0 @@
From 22352b90e78e2d162b98b5ef6c84672c397be40a Mon Sep 17 00:00:00 2001
From: Lars Wendler <polynomial-c@gentoo.org>
Date: Wed, 17 Mar 2021 17:49:18 +0100
Subject: [PATCH] autoconf-2.70 fix
autoconf-2.70 and newer are more strict with quoting etc. and thus generate
a broken configure file:
configure: 20855: Syntax error: ")" unexpected (expecting "fi")
Gentoo-bug: https://bugs.gentoo.org/776241
Signed-off-by: Lars Wendler <polynomial-c@gentoo.org>
---
cf/check-var.m4 | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/cf/check-var.m4 b/cf/check-var.m4
index 2fd7bca6f0..71d6f70ca8 100644
--- a/cf/check-var.m4
+++ b/cf/check-var.m4
@@ -20,7 +20,7 @@ AC_MSG_RESULT($ac_foo)
if test "$ac_foo" = yes; then
AC_DEFINE_UNQUOTED(AS_TR_CPP(HAVE_[]$1), 1,
[Define if you have the `]$1[' variable.])
- m4_ifval([$2], AC_CHECK_DECLS([$1],[],[],[$2]))
+ m4_ifval([$2], [AC_CHECK_DECLS([$1],[],[],[$2])])
fi
])

View file

@ -1,22 +0,0 @@
From c4cff6859d183a40fb35a76e2bc1ce084b3a6d67 Mon Sep 17 00:00:00 2001
From: Luke Howard <lukeh@padl.com>
Date: Mon, 24 Dec 2018 02:21:32 +0000
Subject: [PATCH] hx509: fix dependency, hxtool requires ASN.1 headers
---
lib/hx509/Makefile.am | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lib/hx509/Makefile.am b/lib/hx509/Makefile.am
index c7ef53182d..b21d85202c 100644
--- a/lib/hx509/Makefile.am
+++ b/lib/hx509/Makefile.am
@@ -164,7 +164,7 @@ hxtool-commands.c hxtool-commands.h: hxtool-commands.in $(SLC)
dist_hxtool_SOURCES = hxtool.c
nodist_hxtool_SOURCES = hxtool-commands.c hxtool-commands.h
-$(hxtool_OBJECTS): hxtool-commands.h hx509_err.h
+$(hxtool_OBJECTS): hxtool-commands.h $(nodist_include_HEADERS)
hxtool_LDADD = \
libhx509.la \

View file

@ -1,22 +0,0 @@
From cc6a3f337bac0411d0bb1c924fd857603a258d2f Mon Sep 17 00:00:00 2001
From: Nicolas Williams <nico@twosigma.com>
Date: Tue, 17 Mar 2020 19:46:37 -0500
Subject: [PATCH] hcrypto: Fix Makefile build race
---
lib/hcrypto/Makefile.am | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lib/hcrypto/Makefile.am b/lib/hcrypto/Makefile.am
index 195117d174..3c6ee3ca84 100644
--- a/lib/hcrypto/Makefile.am
+++ b/lib/hcrypto/Makefile.am
@@ -298,7 +298,7 @@ ltmsources = \
libtommath/bn_mp_to_unsigned_bin_n.c
-$(libhcrypto_la_OBJECTS): hcrypto-link
+$(libhcrypto_la_OBJECTS) $(test_rand_OBJECTS): hcrypto-link
libhcrypto_la_CPPFLAGS = -DBUILD_HCRYPTO_LIB $(AM_CPPFLAGS)

View file

@ -1,83 +0,0 @@
From 79b8337d54b2d85f73eff2d033ca592447ac5fce Mon Sep 17 00:00:00 2001
From: heitbaum <rudi@heitbaum.com>
Date: Fri, 10 Sep 2021 00:28:16 +1000
Subject: [PATCH] yyerror: update to POSIX standard
To comply with the latest POSIX standard, in Yacc compatibility mode
(options `-y`/`--yacc`) Bison now generates prototypes for yyerror and
yylex. In some situations, this is breaking compatibility: if the user
has already declared these functions but with some differences (e.g., to
declare them as static, or to use specific attributes), the generated
parser will fail to compile. To disable these prototypes, #define yyerror
(to `yyerror`), and likewise for yylex.
refer: https://git.savannah.gnu.org/cgit/bison.git/tree/NEWS
GNU Bison 3.8
---
lib/asn1/asn1parse.y | 1 +
lib/com_err/parse.y | 5 +++--
lib/sl/slc-lex.l | 2 +-
lib/sl/slc.h | 3 ++-
4 files changed, 7 insertions(+), 4 deletions(-)
diff --git a/lib/asn1/asn1parse.y b/lib/asn1/asn1parse.y
index 9d8b76f582..91b163a28b 100644
--- a/lib/asn1/asn1parse.y
+++ b/lib/asn1/asn1parse.y
@@ -65,6 +65,7 @@ static void validate_object_set(IOSObjectSet *);
static struct constraint_spec *new_constraint_spec(enum ctype);
static Type *new_tag(int tagclass, int tagvalue, int tagenv, Type *oldtype);
void yyerror (const char *);
+#define yyerror yyerror
static struct objid *new_objid(const char *label, int value);
static void add_oid_to_tail(struct objid *, struct objid *);
static void fix_labels(Symbol *s);
diff --git a/lib/com_err/parse.y b/lib/com_err/parse.y
index 0c2e5084b5..bcb9b05204 100644
--- a/lib/com_err/parse.y
+++ b/lib/com_err/parse.y
@@ -35,7 +35,8 @@
#include "compile_et.h"
#include "lex.h"
-void yyerror (char *s);
+void yyerror (const char *s);
+#define yyerror yyerror
static long name2number(const char *str);
extern char *yytext;
@@ -168,7 +169,7 @@ name2number(const char *str)
}
void
-yyerror (char *s)
+yyerror (const char *s)
{
_lex_error_message ("%s\n", s);
}
diff --git a/lib/sl/slc-lex.l b/lib/sl/slc-lex.l
index 50965bccd7..3a37302336 100644
--- a/lib/sl/slc-lex.l
+++ b/lib/sl/slc-lex.l
@@ -78,7 +78,7 @@ error_message (const char *format, ...)
}
void
-yyerror (char *s)
+yyerror (const char *s)
{
error_message("%s\n", s);
}
diff --git a/lib/sl/slc.h b/lib/sl/slc.h
index 6e45ed2f15..e4dc2cba6b 100644
--- a/lib/sl/slc.h
+++ b/lib/sl/slc.h
@@ -51,5 +51,6 @@ extern char *filename;
extern int error_flag;
void error_message (const char *format, ...);
int yylex(void);
-void yyerror (char *s);
+void yyerror (const char *s);
+#define yyerror yyerror
extern unsigned lineno;

View file

@ -3,22 +3,16 @@
# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv) # Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv)
PKG_NAME="libaio" PKG_NAME="libaio"
PKG_VERSION="0.3.112" PKG_VERSION="0.3.113"
PKG_SHA256="f69e5800425f4ea957426693ac09f9896bb993db5490fa021644454adcc72a32" PKG_SHA256="716c7059703247344eb066b54ecbc3ca2134f0103307192e6c2b7dab5f9528ab"
PKG_LICENSE="GPL" PKG_LICENSE="GPL"
PKG_SITE="http://lse.sourceforge.net/io/aio.html" PKG_SITE="https://pagure.io/libaio"
PKG_URL="http://http.debian.net/debian/pool/main/liba/libaio/${PKG_NAME}_${PKG_VERSION}.orig.tar.xz" PKG_URL="https://pagure.io/${PKG_NAME}/archive/${PKG_NAME}-${PKG_VERSION}/${PKG_NAME}-${PKG_NAME}-${PKG_VERSION}.tar.gz"
PKG_DEPENDS_TARGET="toolchain" PKG_DEPENDS_TARGET="toolchain"
PKG_LONGDESC="Kernel Asynchronous I/O (AIO) Support for Linux." PKG_LONGDESC="Kernel Asynchronous I/O (AIO) Support for Linux."
PKG_BUILD_FLAGS="-lto"
make_target() { make_target() {
make -C src make -C src
} }
makeinstall_target() {
mkdir -p ${SYSROOT_PREFIX}/usr/lib
cp -PR src/libaio.a ${SYSROOT_PREFIX}/usr/lib
mkdir -p ${SYSROOT_PREFIX}/usr/include
cp -PR src/libaio.h ${SYSROOT_PREFIX}/usr/include
}

View file

@ -0,0 +1,13 @@
We need to place LDFLAGS earlier to ensure e.g. as-needed works correctly.
--- a/src/Makefile
+++ b/src/Makefile
@@ -56,7 +56,7 @@ libaio.a: $(libaio_objs)
$(libname): $(libaio_sobjs) libaio.map
$(CC) $(CFLAGS) -c struct_offsets.c
- $(CC) $(SO_CFLAGS) -Wl,--version-script=libaio.map -Wl,-soname=$(soname) -o $@ $(libaio_sobjs) $(LINK_FLAGS)
+ $(CC) $(SO_CFLAGS) $(LINK_FLAGS) -Wl,--version-script=libaio.map -Wl,-soname=$(soname) -o $@ $(libaio_sobjs)
install: $(all_targets)
install -D -m 644 libaio.h $(includedir)/libaio.h

View file

@ -3,22 +3,16 @@
# Copyright (C) 2017-present Team LibreELEC (https://libreelec.tv) # Copyright (C) 2017-present Team LibreELEC (https://libreelec.tv)
PKG_NAME="ncurses" PKG_NAME="ncurses"
PKG_VERSION="6.1-20181215" PKG_VERSION="6.3"
PKG_SHA256="08b07c3e792961f300829512c283d5fefc0b1c421a57b76922c3d13303ed677d"
PKG_LICENSE="MIT" PKG_LICENSE="MIT"
PKG_SITE="http://www.gnu.org/software/ncurses/" PKG_SITE="http://www.gnu.org/software/ncurses/"
PKG_URL="http://invisible-mirror.net/archives/ncurses/current/ncurses-${PKG_VERSION}.tgz" PKG_URL="http://invisible-mirror.net/archives/ncurses/ncurses-${PKG_VERSION}.tar.gz"
PKG_DEPENDS_HOST="ccache:host" PKG_DEPENDS_HOST="ccache:host"
PKG_DEPENDS_TARGET="toolchain zlib ncurses:host" PKG_DEPENDS_TARGET="toolchain zlib ncurses:host"
PKG_LONGDESC="A library is a free software emulation of curses in System V Release 4.0, and more." PKG_LONGDESC="A library is a free software emulation of curses in System V Release 4.0, and more."
# causes some segmentation fault's (dialog) when compiled with gcc's link time optimization. PKG_BUILD_FLAGS="+pic +pic:host"
PKG_BUILD_FLAGS="+pic"
PKG_TOOLCHAIN="auto" PKG_TOOLCHAIN="auto"
pre_configure_target() {
export CFLAGS="${CFLAGS} -fcommon -fPIC"
}
PKG_CONFIGURE_OPTS_TARGET=" PKG_CONFIGURE_OPTS_TARGET="
--without-ada \ --without-ada \
--without-cxx \ --without-cxx \
@ -53,23 +47,39 @@ PKG_CONFIGURE_OPTS_TARGET="
--disable-sigwinch \ --disable-sigwinch \
--enable-pc-files \ --enable-pc-files \
--with-pkg-config-libdir=/usr/lib/pkgconfig \ --with-pkg-config-libdir=/usr/lib/pkgconfig \
--disable-tcap-names \ --enable-tcap-names \
--without-develop \ --without-develop \
--disable-hard-tabs \ --disable-hard-tabs \
--disable-xmc-glitch \ --disable-xmc-glitch \
--disable-hashmap \ --disable-hashmap \
--disable-safe-sprintf \ --disable-safe-sprintf \
--disable-scroll-hints \ --disable-scroll-hints \
--disable-widec \ --enable-widec \
--disable-echo \ --disable-echo \
--disable-warnings \ --disable-warnings \
--disable-home-terminfo \ --enable-home-terminfo \
--enable-lib-suffixes \
--disable-assertions" --disable-assertions"
PKG_CONFIGURE_OPTS_HOST="--enable-termcap \
--with-termlib \
--without-shared \
--enable-pc-files \
--without-tests \
--without-manpages"
post_makeinstall_target() { post_makeinstall_target() {
#cp -rf ${INSTALL}/usr/lib/* ${TOOLCHAIN}/${TARGET_ARCH}-libreelec-linux-gnu${TARGET_ABI}/lib local f
cp misc/ncurses-config ${TOOLCHAIN}/bin cp misc/ncurses-config ${TOOLCHAIN}/bin
chmod +x ${TOOLCHAIN}/bin/ncurses-config chmod +x ${TOOLCHAIN}/bin/ncurses-config
sed -e "s:\(['=\" ]\)/usr:\\1${SYSROOT_PREFIX}/usr:g" -i ${TOOLCHAIN}/bin/ncurses-config sed -e "s:\(['=\" ]\)/usr:\\1${PKG_ORIG_SYSROOT_PREFIX}/usr:g" -i ${TOOLCHAIN}/bin/ncurses-config
#rm -rf ${INSTALL}/usr/bin rm -f ${TOOLCHAIN}/bin/ncurses6-config
rm -rf ${INSTALL}/usr/bin
# create links to be compatible with any ncurses include path and lib names
ln -sf . ${SYSROOT_PREFIX}/usr/include/ncursesw
ln -sf . ${SYSROOT_PREFIX}/usr/include/ncurses
for f in form menu ncurses panel tinfo; do
ln -sf lib${f}w.a ${SYSROOT_PREFIX}/usr/lib/lib${f}.a
ln -sf ${f}w.pc ${SYSROOT_PREFIX}/usr/lib/pkgconfig/${f}.pc
done
} }

View file

@ -1,16 +1,16 @@
Remove recent xterm terminfo features to be compatible with other emulations Remove recent xterm terminfo features to be compatible with other emulations
--- a/misc/terminfo.src 2018-12-21 18:53:11.000000000 +0100 --- a/misc/terminfo.src 2021-03-20 22:45:39.000000000 +0100
+++ a/misc/terminfo.src 2018-12-22 22:56:47.000000000 +0100 +++ b/misc/terminfo.src 2021-06-01 23:53:10.335516419 +0200
@@ -4335,8 +4335,8 @@ xterm-xfree86|xterm terminal emulator (X @@ -4808,8 +4808,8 @@ xterm-xfree86|xterm terminal emulator (X
xterm-new|modern xterm terminal emulator, xterm+nofkeys|building block for xterm fkey-variants,
npc, npc,
indn=\E[%p1%dS, kb2=\EOE, kcbt=\E[Z, kent=\EOM, kcbt=\E[Z, kent=\EOM, nel=\EE, use=ecma+index,
- rin=\E[%p1%dT, use=ansi+rep, use=ecma+strikeout, - use=ansi+rep, use=ecma+strikeout, use=vt420+lrmm,
- use=xterm+sm+1006, use=xterm+pcfkeys, use=xterm+tmux, - use=xterm+sm+1006, use=xterm+tmux, use=ecma+italics,
+ rin=\E[%p1%dT, use=ecma+strikeout, + use=ecma+strikeout, use=vt420+lrmm,
+ use=xterm+sm+1005, use=xterm+pcfkeys, use=xterm+tmux, + use=xterm+sm+1005, use=xterm+tmux, use=ecma+italics,
use=xterm-basic, use=xterm+keypad, use=xterm-basic,
# This fragment is for people who cannot agree on what the backspace key # This version reflects the current xterm features.

View file

@ -1,19 +1,8 @@
Fix freeing not allocated fallback entries by allocating a copy. Fix freeing not allocated fallback entries by allocating a copy.
--- a/ncurses/tinfo/lib_setup.c 2018-11-24 23:13:16.000000000 +0100
+++ b/ncurses/tinfo/lib_setup.c 2018-12-29 10:31:01.000000000 +0100
@@ -756,6 +756,8 @@ TINFO_SETUP_TERM(TERMINAL **tp,
if (status != TGETENT_YES) {
const TERMTYPE2 *fallback = _nc_fallback2(tname);
+ if (fallback)
+ fallback = _nc_copy_entry(fallback);
if (fallback) {
T(("found fallback entry"));
TerminalType(termp) = *fallback;
--- a/ncurses/tinfo/tinfo_driver.c 2018-11-24 23:17:03.000000000 +0100 --- a/ncurses/tinfo/tinfo_driver.c 2018-11-24 23:17:03.000000000 +0100
+++ b/ncurses/tinfo/tinfo_driver.c 2018-12-29 10:27:19.000000000 +0100 +++ b/ncurses/tinfo/tinfo_driver.c 2018-12-29 10:27:19.000000000 +0100
@@ -172,6 +172,8 @@ drv_CanHandle(TERMINAL_CONTROL_BLOCK * T @@ -180,6 +180,8 @@ drv_CanHandle(TERMINAL_CONTROL_BLOCK * T
if (status != TGETENT_YES) { if (status != TGETENT_YES) {
const TERMTYPE2 *fallback = _nc_fallback2(tname); const TERMTYPE2 *fallback = _nc_fallback2(tname);

View file

@ -0,0 +1,18 @@
Fix USE_SCROLL_HINTS/USE_HASHMAP logic
--- a/ncurses/curses.priv.h 2018-12-16 02:16:58.000000000 +0100
+++ a/ncurses/curses.priv.h 2021-05-30 00:12:14.086528124 +0200
@@ -258,10 +258,9 @@ extern NCURSES_EXPORT(void *) _nc_memmov
/*
* Scroll hints are useless when hashmap is used
*/
-#if !USE_SCROLL_HINTS
-#if !USE_HASHMAP
-#define USE_SCROLL_HINTS 1
-#else
+#if USE_SCROLL_HINTS
+#if USE_HASHMAP
+#undef USE_SCROLL_HINTS
#define USE_SCROLL_HINTS 0
#endif
#endif

View file

@ -0,0 +1,13 @@
Fix configure option --with-pkg-config-libdir is broken for cross compilation
--- a/configure 2021-10-17 17:12:23.000000000 +0200
+++ b/configure 2021-11-26 00:27:00.224815736 +0100
@@ -4229,7 +4229,7 @@ echo $ECHO_N "checking for first directo
cf_pkg_config_path=none
for cf_config in $cf_search_path
do
- if test -d "$cf_config"
+ if test -n "$cf_config"
then
cf_pkg_config_path=$cf_config
break

View file

@ -3,13 +3,13 @@
# Copyright (C) 2018-present Team LibreELEC (https://libreelec.tv) # Copyright (C) 2018-present Team LibreELEC (https://libreelec.tv)
PKG_NAME="pcre" PKG_NAME="pcre"
PKG_VERSION="8.44" PKG_VERSION="8.45"
PKG_SHA256="19108658b23b3ec5058edc9f66ac545ea19f9537234be1ec62b714c84399366d" PKG_SHA256="4dae6fdcd2bb0bb6c37b5f97c33c2be954da743985369cddac3546e3218bffb8"
PKG_LICENSE="OSS" PKG_LICENSE="OSS"
PKG_SITE="http://www.pcre.org/" PKG_SITE="http://www.pcre.org/"
PKG_URL="https://downloads.sourceforge.net/sourceforge/pcre/${PKG_NAME}-${PKG_VERSION}.tar.bz2" PKG_URL="${SOURCEFORGE_SRC}/pcre/${PKG_NAME}/${PKG_VERSION}/${PKG_NAME}-${PKG_VERSION}.tar.bz2"
PKG_DEPENDS_HOST="toolchain:host" PKG_DEPENDS_HOST="toolchain:host"
PKG_DEPENDS_TARGET="toolchain" PKG_DEPENDS_TARGET="toolchain pcre:host"
PKG_LONGDESC="A set of functions that implement regular expression pattern matching." PKG_LONGDESC="A set of functions that implement regular expression pattern matching."
PKG_TOOLCHAIN="configure" PKG_TOOLCHAIN="configure"
PKG_BUILD_FLAGS="+pic" PKG_BUILD_FLAGS="+pic"
@ -20,8 +20,7 @@ PKG_CONFIGURE_OPTS_HOST="--prefix=${TOOLCHAIN} \
--enable-unicode-properties \ --enable-unicode-properties \
--with-gnu-ld" --with-gnu-ld"
PKG_CONFIGURE_OPTS_TARGET="--disable-shared \ PKG_CONFIGURE_OPTS_TARGET="--enable-static \
--enable-static \
--enable-utf8 \ --enable-utf8 \
--enable-pcre16 \ --enable-pcre16 \
--enable-unicode-properties \ --enable-unicode-properties \
@ -29,5 +28,7 @@ PKG_CONFIGURE_OPTS_TARGET="--disable-shared \
post_makeinstall_target() { post_makeinstall_target() {
rm -rf ${INSTALL}/usr/bin rm -rf ${INSTALL}/usr/bin
sed -e "s:\(['= ]\)/usr:\\1${SYSROOT_PREFIX}/usr:g" -i ${SYSROOT_PREFIX}/usr/bin/${PKG_NAME}-config cp ${PKG_NAME}-config ${TOOLCHAIN}/bin
sed -e "s:\(['= ]\)/usr:\\1${PKG_ORIG_SYSROOT_PREFIX}/usr:g" -i ${TOOLCHAIN}/bin/${PKG_NAME}-config
chmod +x ${TOOLCHAIN}/bin/${PKG_NAME}-config
} }

View file

@ -1,32 +1,32 @@
# SPDX-License-Identifier: GPL-2.0-or-later # SPDX-License-Identifier: GPL-2.0
# Copyright (C) 2018-present Team CoreELEC (https://coreelec.org) # Copyright (C) 2017-present Team LibreELEC (https://libreelec.tv)
PKG_NAME="pcre2" PKG_NAME="pcre2"
PKG_VERSION="10.33" PKG_VERSION="10.40"
PKG_SHA256="35514dff0ccdf02b55bd2e9fa586a1b9d01f62332c3356e379eabb75f789d8aa" PKG_SHA256="14e4b83c4783933dc17e964318e6324f7cae1bc75d8f3c79bc6969f00c159d68"
PKG_LICENSE="BSD" PKG_LICENSE="BSD"
PKG_SITE="http://www.pcre.org/" PKG_SITE="http://www.pcre.org/"
PKG_URL="https://ftp.pcre.org/pub/pcre/${PKG_NAME}-${PKG_VERSION}.tar.bz2" PKG_URL="https://github.com/PCRE2Project/pcre2/releases/download/pcre2-${PKG_VERSION}/pcre2-${PKG_VERSION}.tar.bz2"
PKG_DEPENDS_HOST="gcc:host" PKG_DEPENDS_HOST="toolchain:host"
PKG_DEPENDS_TARGET="toolchain" PKG_DEPENDS_TARGET="toolchain"
PKG_LONGDESC="A set of functions that implement regular expression pattern matching." PKG_LONGDESC="A set of functions that implement regular expression pattern matching using the same syntax."
PKG_TOOLCHAIN="configure" PKG_BUILD_FLAGS="+pic +pic:host"
PKG_BUILD_FLAGS="+pic"
PKG_CONFIGURE_OPTS_HOST="--prefix=${TOOLCHAIN} \ PKG_CMAKE_OPTS_HOST="-DBUILD_SHARED_LIBS=OFF \
--enable-static \ -DBUILD_STATIC_LIBS=ON \
--enable-utf8 \ -DPCRE2_BUILD_PCRE2_8=ON \
--enable-unicode-properties \ -DPCRE2_BUILD_PCRE2_16=ON \
--with-gnu-ld" -DPCRE2_BUILD_PCRE2_32=ON \
-DPCRE2_SUPPORT_JIT=ON \
-DPCRE2_BUILD_TESTS=OFF \
-DPCRE2_SUPPORT_LIBEDIT=OFF \
-DPCRE2_SUPPORT_LIBREADLINE=OFF"
PKG_CONFIGURE_OPTS_TARGET="--disable-shared \ PKG_CMAKE_OPTS_TARGET="-DBUILD_SHARED_LIBS=OFF \
--enable-static \ -DPCRE2_BUILD_PCRE2_16=ON \
--enable-utf8 \ -DPCRE2_SUPPORT_LIBEDIT=OFF \
--enable-pcre2-16 \ -DPCRE2_SUPPORT_LIBREADLINE=OFF"
--enable-unicode-properties \
--with-gnu-ld"
post_makeinstall_target() { post_makeinstall_target() {
safe_remove ${INSTALL}/usr/bin safe_remove ${INSTALL}/usr/bin
sed -e "s:\(['= ]\)/usr:\\1${SYSROOT_PREFIX}/usr:g" -i ${SYSROOT_PREFIX}/usr/bin/${PKG_NAME}-config
} }

View file

@ -3,20 +3,21 @@
# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv) # Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv)
PKG_NAME="readline" PKG_NAME="readline"
PKG_VERSION="8.0" PKG_VERSION="8.1.2"
PKG_SHA256="e339f51971478d369f8a053a330a190781acb9864cf4c541060f12078948e461" PKG_SHA256="7589a2381a8419e68654a47623ce7dfcb756815c8fee726b98f90bf668af7bc6"
PKG_LICENSE="MIT" PKG_LICENSE="MIT"
PKG_SITE="http://www.gnu.org/software/readline/" PKG_SITE="http://www.gnu.org/software/readline/"
PKG_URL="http://ftpmirror.gnu.org/readline/$PKG_NAME-$PKG_VERSION.tar.gz" PKG_URL="http://ftpmirror.gnu.org/readline/${PKG_NAME}-${PKG_VERSION}.tar.gz"
PKG_DEPENDS_TARGET="toolchain ncurses" PKG_DEPENDS_TARGET="toolchain ncurses"
PKG_LONGDESC="The GNU Readline library provides a set of functions for use by applications that allow users to edit command lines as they are typed in." PKG_LONGDESC="The GNU Readline library provides a set of functions for use by applications that allow users to edit command lines as they are typed in."
PKG_BUILD_FLAGS="+pic" PKG_BUILD_FLAGS="+pic"
PKG_CONFIGURE_OPTS_TARGET="bash_cv_wcwidth_broken=no \ PKG_CONFIGURE_OPTS_TARGET="bash_cv_wcwidth_broken=no \
--disable-shared \ --enable-shared \
--enable-static \ --disable-static \
--with-curses" --with-curses"
post_makeinstall_target() { post_makeinstall_target() {
rm -rf $INSTALL/usr/share/readline sed -i 's/-lreadline/-lreadline -lncursesw/' ${SYSROOT_PREFIX}/usr/lib/pkgconfig/readline.pc
rm -rf ${INSTALL}/usr/share/readline
} }

View file

@ -2,7 +2,7 @@
# Copyright (C) 2019-present Shanti Gilbert (https://github.com/shantigilbert) # Copyright (C) 2019-present Shanti Gilbert (https://github.com/shantigilbert)
# Copyright (C) 2022-present Fewtarius # Copyright (C) 2022-present Fewtarius
PKG_NAME="PPSSPPSDL" PKG_NAME="PPSSPPSDL"
PKG_VERSION="d11640a070d7516b6a4660a0543dd9ee285e0d53" PKG_VERSION="9fe6338"
PKG_REV="1" PKG_REV="1"
PKG_ARCH="any" PKG_ARCH="any"
PKG_LICENSE="GPLv2" PKG_LICENSE="GPLv2"
@ -32,17 +32,27 @@ if [ "${OPENGLES_SUPPORT}" = yes ]; then
-DUSING_X11_VULKAN=OFF" -DUSING_X11_VULKAN=OFF"
fi fi
if [ "${ARCH}" = "x86_64" ] ### Vulkan is still not working for PPSSPP on the win600 yet.
then #if [ "${VULKAN_SUPPORT}" = "yes" ]
PKG_DEPENDS_TARGET+=" vulkan-loader vulkan-headers" #then
PKG_CMAKE_OPTS_TARGET+=" -DUSE_VULKAN_DISPLAY_KHR=ON \ # PKG_DEPENDS_TARGET+=" vulkan-loader vulkan-headers"
-DVULKAN=ON \ # PKG_CMAKE_OPTS_TARGET+=" -DUSE_VULKAN_DISPLAY_KHR=ON \
-DUSING_X11_VULKAN=ON" # -DVULKAN=ON \
# -DEGL_NO_X11=1
# -DMESA_EGL_NO_X11_HEADERS=1"
#else
PKG_CMAKE_OPTS_TARGET+=" -DVULKAN=OFF"
#fi
if [ "${DISPLAYSERVER}" = "wl" ]; then
PKG_DEPENDS_TARGET+=" wayland ${WINDOWMANAGER}"
PKG_CMAKE_OPTS_TARGET+=" -DUSE_WAYLAND_WSI=ON"
else
PKG_CMAKE_OPTS_TARGET+=" -DUSE_WAYLAND_WSI=OFF"
fi fi
PKG_CMAKE_OPTS_TARGET+="${PKG_CMAKE_OPTS_TARGET} \ PKG_CMAKE_OPTS_TARGET+="${PKG_CMAKE_OPTS_TARGET} \
-DUSE_SYSTEM_FFMPEG=OFF \ -DUSE_SYSTEM_FFMPEG=OFF \
-DUSE_WAYLAND_WSI=OFF \
-DCMAKE_BUILD_TYPE=Release \ -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_SYSTEM_NAME=Linux \ -DCMAKE_SYSTEM_NAME=Linux \
-DBUILD_SHARED_LIBS=OFF \ -DBUILD_SHARED_LIBS=OFF \

View file

@ -0,0 +1,60 @@
diff --git a/SDL/SDLMain.cpp b/SDL/SDLMain.cpp
index 7551231..475bb63 100644
--- a/SDL/SDLMain.cpp
+++ b/SDL/SDLMain.cpp
@@ -420,11 +420,11 @@ void ToggleFullScreenIfFlagSet(SDL_Window *window) {
Uint32 window_flags = SDL_GetWindowFlags(window);
if (g_ToggleFullScreenType == -1) {
- window_flags ^= SDL_WINDOW_FULLSCREEN_DESKTOP;
+ window_flags ^= SDL_WINDOW_FULLSCREEN;
} else if (g_ToggleFullScreenType == 1) {
- window_flags |= SDL_WINDOW_FULLSCREEN_DESKTOP;
+ window_flags |= SDL_WINDOW_FULLSCREEN;
} else {
- window_flags &= ~SDL_WINDOW_FULLSCREEN_DESKTOP;
+ window_flags &= ~SDL_WINDOW_FULLSCREEN;
}
SDL_SetWindowFullscreen(window, window_flags);
}
@@ -524,7 +524,7 @@ int main(int argc, char *argv[]) {
Uint32 mode = 0;
for (int i = 1; i < argc; i++) {
if (!strcmp(argv[i],"--fullscreen"))
- mode |= SDL_WINDOW_FULLSCREEN_DESKTOP;
+ mode |= SDL_WINDOW_FULLSCREEN;
else if (set_xres == -2)
set_xres = parseInt(argv[i]);
else if (set_yres == -2)
@@ -596,19 +596,19 @@ int main(int argc, char *argv[]) {
// Force fullscreen if the resolution is too low to run windowed.
if (g_DesktopWidth < 480 * 2 && g_DesktopHeight < 272 * 2) {
- mode |= SDL_WINDOW_FULLSCREEN_DESKTOP;
+ mode |= SDL_WINDOW_FULLSCREEN;
}
// If we're on mobile, don't try for windowed either.
#if defined(MOBILE_DEVICE) && !PPSSPP_PLATFORM(SWITCH)
mode |= SDL_WINDOW_FULLSCREEN;
#elif defined(USING_FBDEV) || PPSSPP_PLATFORM(SWITCH)
- mode |= SDL_WINDOW_FULLSCREEN_DESKTOP;
+ mode |= SDL_WINDOW_FULLSCREEN;
#else
mode |= SDL_WINDOW_RESIZABLE;
#endif
- if (mode & SDL_WINDOW_FULLSCREEN_DESKTOP) {
+ if (mode & SDL_WINDOW_FULLSCREEN) {
pixel_xres = g_DesktopWidth;
pixel_yres = g_DesktopHeight;
g_Config.bFullScreen = true;
@@ -716,7 +716,7 @@ int main(int argc, char *argv[]) {
// Use the setting from the config when initing the window.
if (g_Config.UseFullScreen())
- mode |= SDL_WINDOW_FULLSCREEN_DESKTOP;
+ mode |= SDL_WINDOW_FULLSCREEN;
int x = SDL_WINDOWPOS_UNDEFINED_DISPLAY(getDisplayNumber());
int y = SDL_WINDOWPOS_UNDEFINED;

View file

@ -1,145 +0,0 @@
diff -rupN PPSSPPSDL.orig/Core/Config.cpp PPSSPPSDL/Core/Config.cpp
--- PPSSPPSDL.orig/Core/Config.cpp 2022-07-11 09:42:33.527206786 -0400
+++ PPSSPPSDL/Core/Config.cpp 2022-07-11 09:44:08.327266817 -0400
@@ -873,6 +873,7 @@ static ConfigSetting graphicsSettings[]
#if defined(USING_WIN_UI)
ConfigSetting("RestartRequired", &g_Config.bRestartRequired, false, false),
#endif
+ ReportedConfigSetting("ForceMaxEmulatedFPS", &g_Config.iForceMaxEmulatedFPS, 0, true, true),
// Most low-performance (and many high performance) mobile GPUs do not support aniso anyway so defaulting to 4 is fine.
ConfigSetting("AnisotropyLevel", &g_Config.iAnisotropyLevel, 4, true, true),
diff -rupN PPSSPPSDL.orig/Core/Config.h PPSSPPSDL/Core/Config.h
--- PPSSPPSDL.orig/Core/Config.h 2022-07-11 09:42:33.527206786 -0400
+++ PPSSPPSDL/Core/Config.h 2022-07-11 09:44:57.431275968 -0400
@@ -214,6 +214,7 @@ public:
bool bTexHardwareScaling;
int iFpsLimit1;
int iFpsLimit2;
+ int iForceMaxEmulatedFPS;
int iAnalogFpsLimit;
int iAnalogFpsMode; // 0 = auto, 1 = single direction, 2 = mapped to opposite
int iMaxRecent;
Binary files PPSSPPSDL.orig/Core/.Config.h.rej.swp and PPSSPPSDL/Core/.Config.h.rej.swp differ
diff -rupN PPSSPPSDL.orig/Core/HLE/sceDisplay.cpp PPSSPPSDL/Core/HLE/sceDisplay.cpp
--- PPSSPPSDL.orig/Core/HLE/sceDisplay.cpp 2022-07-11 09:42:33.531206790 -0400
+++ PPSSPPSDL/Core/HLE/sceDisplay.cpp 2022-07-11 09:44:08.327266817 -0400
@@ -820,8 +820,13 @@ u32 sceDisplaySetFramebuf(u32 topaddr, i
hleEatCycles(290);
s64 delayCycles = 0;
+
+ int MaxFPS = g_Config.iForceMaxEmulatedFPS;
+ if (MaxFPS == 0 && PSP_CoreParameter().compat.flags().ForceMax60FPS) {
+ MaxFPS = 60;
+ }
// Don't count transitions between display off and display on.
- if (topaddr != 0 && topaddr != framebuf.topaddr && framebuf.topaddr != 0 && PSP_CoreParameter().compat.flags().ForceMax60FPS) {
+ if (topaddr != 0 && topaddr != framebuf.topaddr && framebuf.topaddr != 0 && MaxFPS > 0) {
// sceDisplaySetFramebuf() isn't supposed to delay threads at all. This is a hack.
// So let's only delay when it's more than 1ms.
const s64 FLIP_DELAY_CYCLES_MIN = usToCycles(1000);
@@ -845,7 +850,7 @@ u32 sceDisplaySetFramebuf(u32 topaddr, i
}
// 1001 to account for NTSC timing (59.94 fps.)
- u64 expected = msToCycles(1001) / 60 - LEEWAY_CYCLES_PER_FLIP;
+ u64 expected = msToCycles(1001) / MaxFPS - LEEWAY_CYCLES_PER_FLIP;
lastFlipCycles = now;
nextFlipCycles = std::max(lastFlipCycles, nextFlipCycles) + expected;
}
diff -rupN PPSSPPSDL.orig/libretro/libretro.cpp PPSSPPSDL/libretro/libretro.cpp
--- PPSSPPSDL.orig/libretro/libretro.cpp 2022-07-11 09:42:36.443209544 -0400
+++ PPSSPPSDL/libretro/libretro.cpp 2022-07-11 09:44:08.331266818 -0400
@@ -538,6 +538,7 @@ static RetroOption<int> ppsspp_rendering
static RetroOption<bool> ppsspp_auto_frameskip("ppsspp_auto_frameskip", "Auto Frameskip", false);
static RetroOption<int> ppsspp_frameskip("ppsspp_frameskip", "Frameskip", { "Off", "1", "2", "3", "4", "5", "6", "7", "8" });
static RetroOption<int> ppsspp_frameskiptype("ppsspp_frameskiptype", "Frameskip Type", { {"Number of frames", 0}, {"Percent of FPS", 1} });
+static RetroOption<int> ppsspp_force_max_fps("ppsspp_force_max_fps", "Force Max FPS", { {"Auto", 0}, {"10", 10}, {"20", 20}, {"30", 30}, {"40", 40}, {"50", 50}, {"60", 60}, {"70", 70}, {"80", 80} });
static RetroOption<int> ppsspp_internal_resolution("ppsspp_internal_resolution", "Internal Resolution (Restart)", 1, { "480x272", "960x544", "1440x816", "1920x1088", "2400x1360", "2880x1632", "3360x1904", "3840x2176", "4320x2448", "4800x2720" });
static RetroOption<int> ppsspp_button_preference("ppsspp_button_preference", "Confirmation Button", { { "Cross", PSP_SYSTEMPARAM_BUTTON_CROSS }, { "Circle", PSP_SYSTEMPARAM_BUTTON_CIRCLE } });
static RetroOption<bool> ppsspp_fast_memory("ppsspp_fast_memory", "Fast Memory (Speedhack)", true);
@@ -690,6 +691,7 @@ void retro_set_environment(retro_environ
vars.push_back(ppsspp_frameskip.GetOptions());
vars.push_back(ppsspp_frameskiptype.GetOptions());
vars.push_back(ppsspp_frame_duplication.GetOptions());
+ vars.push_back(ppsspp_force_max_fps.GetOptions());
vars.push_back(ppsspp_detect_vsync_swap_interval.GetOptions());
vars.push_back(ppsspp_vertex_cache.GetOptions());
vars.push_back(ppsspp_fast_memory.GetOptions());
@@ -820,6 +822,7 @@ static void check_variables(CoreParamete
ppsspp_cheats.Update(&g_Config.bEnableCheats);
ppsspp_locked_cpu_speed.Update(&g_Config.iLockedCPUSpeed);
ppsspp_rendering_mode.Update(&g_Config.iRenderingMode);
+ ppsspp_force_max_fps.Update(&g_Config.iForceMaxEmulatedFPS);
ppsspp_cpu_core.Update((CPUCore *)&g_Config.iCpuCore);
ppsspp_io_timing_method.Update((IOTimingMethods *)&g_Config.iIOTimingMethod);
ppsspp_lower_resolution_for_effects.Update(&g_Config.iBloomHack);
diff -rupN PPSSPPSDL.orig/UI/GameSettingsScreen.cpp PPSSPPSDL/UI/GameSettingsScreen.cpp
--- PPSSPPSDL.orig/UI/GameSettingsScreen.cpp 2022-07-11 09:42:33.551206809 -0400
+++ PPSSPPSDL/UI/GameSettingsScreen.cpp 2022-07-11 09:44:08.331266818 -0400
@@ -200,6 +200,8 @@ void GameSettingsScreen::CreateViews() {
g_Config.loadGameConfig(gameID_, info->GetTitle());
}
+ maxFpsChoice = (g_Config.iForceMaxEmulatedFPS / 10);
+
iAlternateSpeedPercent1_ = g_Config.iFpsLimit1 < 0 ? -1 : (g_Config.iFpsLimit1 * 100) / 60;
iAlternateSpeedPercent2_ = g_Config.iFpsLimit2 < 0 ? -1 : (g_Config.iFpsLimit2 * 100) / 60;
iAlternateSpeedPercentAnalog_ = (g_Config.iAnalogFpsLimit * 100) / 60;
@@ -326,7 +328,10 @@ void GameSettingsScreen::CreateViews() {
graphicsSettings->Add(new PopupMultiChoice(&g_Config.iFrameSkipType, gr->T("Frame Skipping Type"), frameSkipType, 0, ARRAY_SIZE(frameSkipType), gr->GetName(), screenManager()));
frameSkipAuto_ = graphicsSettings->Add(new CheckBox(&g_Config.bAutoFrameSkip, gr->T("Auto FrameSkip")));
frameSkipAuto_->OnClick.Handle(this, &GameSettingsScreen::OnAutoFrameskip);
-
+ static const char *maxFps[] = {"Auto", "10", "20", "30", "40", "50", "60", "70", "80"};
+ maxFps_ = graphicsSettings->Add(new PopupMultiChoice(&maxFpsChoice, gr->T("Force Max FPS (lower helps GoW)"), maxFps, 0, ARRAY_SIZE(maxFps), gr->GetName(), screenManager()));
+ maxFps_->OnChoice.Handle(this, &GameSettingsScreen::OnForceMaxEmulatedFPS);
+
PopupSliderChoice *altSpeed1 = graphicsSettings->Add(new PopupSliderChoice(&iAlternateSpeedPercent1_, 0, 1000, gr->T("Alternative Speed", "Alternative speed"), 5, screenManager(), gr->T("%, 0:unlimited")));
altSpeed1->SetFormat("%i%%");
altSpeed1->SetZeroLabel(gr->T("Unlimited"));
@@ -1295,6 +1300,16 @@ UI::EventReturn GameSettingsScreen::OnDi
return UI::EVENT_DONE;
};
+UI::EventReturn GameSettingsScreen::OnForceMaxEmulatedFPS(UI::EventParams &e) {
+ if (maxFpsChoice > 0) {
+ g_Config.iForceMaxEmulatedFPS = (maxFpsChoice * 10);
+ } else {
+ g_Config.iForceMaxEmulatedFPS = 0;
+ }
+ Reporting::UpdateConfig();
+ return UI::EVENT_DONE;
+}
+
UI::EventReturn GameSettingsScreen::OnResolutionChange(UI::EventParams &e) {
if (g_Config.iAndroidHwScale == 1) {
RecreateActivity();
diff -rupN PPSSPPSDL.orig/UI/GameSettingsScreen.h PPSSPPSDL/UI/GameSettingsScreen.h
--- PPSSPPSDL.orig/UI/GameSettingsScreen.h 2022-07-11 09:42:33.551206809 -0400
+++ PPSSPPSDL/UI/GameSettingsScreen.h 2022-07-11 09:44:08.331266818 -0400
@@ -59,6 +59,7 @@ private:
UI::Choice *displayEditor_;
UI::Choice *backgroundChoice_ = nullptr;
UI::PopupMultiChoice *resolutionChoice_;
+ UI::PopupMultiChoice *maxFps_;
UI::CheckBox *frameSkipAuto_;
SettingInfoMessage *settingInfo_;
UI::Choice *clearSearchChoice_;
@@ -107,6 +108,7 @@ private:
UI::EventReturn OnFullscreenMultiChange(UI::EventParams &e);
UI::EventReturn OnDisplayLayoutEditor(UI::EventParams &e);
UI::EventReturn OnResolutionChange(UI::EventParams &e);
+ UI::EventReturn OnForceMaxEmulatedFPS(UI::EventParams &e);
UI::EventReturn OnHwScaleChange(UI::EventParams &e);
UI::EventReturn OnRestoreDefaultSettings(UI::EventParams &e);
UI::EventReturn OnRenderingMode(UI::EventParams &e);
@@ -135,6 +137,7 @@ private:
UI::EventReturn OnClearSearchFilter(UI::EventParams &e);
// Temporaries to convert setting types, cache enabled, etc.
+ int maxFpsChoice;
int iAlternateSpeedPercent1_;
int iAlternateSpeedPercent2_;
int iAlternateSpeedPercentAnalog_;

View file

@ -0,0 +1,23 @@
[ControlMapping]
Up = 10-19,1-19
Down = 10-20,1-20
Left = 10-21,1-21
Right = 10-22,1-22
Circle = 10-190,1-52,10-4004
Cross = 10-189,1-54,10-4006
Square = 10-191,1-29,10-4005
Triangle = 10-188,1-47,10-4007
Start = 10-197,1-62
Select = 10-196,1-66
L = 10-193,1-45
R = 10-192,1-51
An.Up = 10-4003
An.Down = 10-4002
An.Left = 10-4001
An.Right = 10-4000
Analog limiter = 1-60
RapidFire = 1-59
Fast-forward = 1-61
SpeedToggle = 1-68
Pause = 1-111,10-106,10-107
Rewind = 1-67

View file

@ -0,0 +1,512 @@
[General]
FirstRun = False
RunCount = 16
Enable Logging = False
AutoRun = True
Browse = False
IgnoreBadMemAccess = False
CurrentDirectory = /storage/roms/psp
ShowDebuggerOnLoad = False
CheckForNewVersion = True
Language = en_US
ForceLagSync = False
DiscordPresence = False
NumWorkerThreads = 8
AutoLoadSaveState = 0
EnableCheats = True
CwCheatRefreshRate = 77
ScreenshotsAsPNG = False
UseFFV1 = False
DumpFrames = False
DumpAudio = False
SaveLoadResetsAVdumping = False
StateSlot = 0
EnableStateUndo = True
RewindFlipFrequency = 0
GridView1 = True
GridView2 = True
GridView3 = False
ComboMode = 0
ReportingHost = default
AutoSaveSymbolMap = False
CacheFullIsoInRam = False
RemoteISOPort = 0
LastRemoteISOServer =
LastRemoteISOPort = 0
RemoteISOManualConfig = False
RemoteShareOnStartup = False
RemoteISOSubdir = /
RemoteDebuggerOnStartup = False
InternalScreenRotation = 1
PauseWhenMinimized = False
DumpDecryptedEboots = False
MemStickInserted = True
ForceLagSync2 = False
UISound = True
CwCheatScrollPosition = 0.000000
DumpVideoOutput = False
ShowRegionOnGameIcon = False
ShowIDOnGameIcon = False
GameGridScale = 1.000000
RightAnalogUp = 0
RightAnalogDown = 0
RightAnalogLeft = 0
RightAnalogRight = 0
RightAnalogPress = 0
RightAnalogCustom = False
LoadPlugins = False
GameListScrollPosition = 0.000000
StateLoadUndoGame = NA
StateUndoLastSaveGame = NA
StateUndoLastSaveSlot = -5
ShowOnScreenMessage = True
RightAnalogDisableDiagonal = False
SwipeUp = 0
SwipeDown = 0
SwipeLeft = 0
SwipeRight = 0
SwipeSensitivity = 1.000000
SwipeSmoothing = 0.300000
DoubleTapGesture = 0
GestureControlEnabled = False
BackgroundAnimation = 1
EnablePlugins = True
[CPU]
CPUCore = 1
SeparateSASThread = True
SeparateIOThread = True
IOTimingMethod = 0
FastMemoryAccess = True
FuncReplacements = True
HideSlowWarnings = False
HideStateWarnings = False
PreloadFunctions = False
CPUSpeed = 0
JitDisableFlags = 0x00000000
FunctionReplacements = True
[Graphics]
EnableCardboard = False
CardboardScreenSize = 50
CardboardXShift = 0
CardboardYShift = 0
ShowFPSCounter = 3
GraphicsBackend = 0 (OPENGL)
FailedGraphicsBackends =
VulkanDevice =
RenderingMode = 0
SoftwareRenderer = False
HardwareTransform = True
SoftwareSkinning = True
TextureFiltering = 1
BufferFiltering = 1
InternalResolution = 0
AndroidHwScale = 1
HighQualityDepth = 1
FrameSkip = 0
FrameSkipType = 0
AutoFrameSkip = False
FrameRate = 0
FrameRate2 = -1
FrameSkipUnthrottle = True
ForceMaxEmulatedFPS = 30
AnisotropyLevel = 0
VertexDecCache = True
TextureBackoffCache = True
TextureSecondaryCache = False
FullScreen = True
FullScreenMulti = False
SmallDisplayZoomType = 2
SmallDisplayOffsetX = 0.500000
SmallDisplayOffsetY = 0.500000
SmallDisplayZoomLevel = 1.000000
ImmersiveMode = False
SustainedPerformanceMode = False
TrueColor = True
ReplaceTextures = True
SaveNewTextures = False
IgnoreTextureFilenames = True
TexScalingLevel = 1
TexScalingType = 3
TexDeposterize = False
VSyncInterval = True
DisableStencilTest = False
BloomHack = 2
TimerHack = False
SplineBezierQuality = 0
HardwareTessellation = False
PostShader = Off
MemBlockTransferGPU = True
DisableSlowFramebufEffects = True
FragmentTestCache = True
LogFrameDrops = False
EnableCardboardVR = False
DisabledGraphicsBackends =
CameraDevice =
UnthrottleMode = CONTINUOUS
IgnoreScreenInsets = True
TexHardwareScaling = False
TextureShader = Off
InflightFrames = 2
RenderDuplicateFrames = True
ShaderChainRequires60FPS = False
ClearFramebuffersOnFirstUseHack = False
SoftwareRendererJit = True
UnthrottlingMode = CONTINUOUS
ReplaceTexturesAllowLate = True
[Sound]
Enable = True
AudioBackend = 0
AudioLatency = 1
ExtraAudioBuffering = False
SoundSpeedHack = False
AudioResampler = False
GlobalVolume = 10
AltSpeedVolume = -1
AudioDevice = es8316, ff890000.i2s-ES8316 HiFi ES8316 HiFi-0
AutoAudioDevice = False
ReverbVolume = 10
[Control]
HapticFeedback = False
ShowTouchCross = True
ShowTouchCircle = True
ShowTouchSquare = True
ShowTouchTriangle = True
ComboKey0Mapping = 0
ComboKey1Mapping = 0
ComboKey2Mapping = 0
ComboKey3Mapping = 0
ComboKey4Mapping = 0
ShowTouchPause = False
ShowTouchControls = False
DisableDpadDiagonals = False
GamepadOnlyFocused = False
TouchButtonStyle = 1
TouchButtonOpacity = 65
TouchButtonHideSeconds = 20
AutoCenterTouchAnalog = False
ActionButtonSpacing2 = 1.000000
ActionButtonCenterX = 0.937500
ActionButtonCenterY = 0.900000
ActionButtonScale = 1.150000
DPadX = 0.074479
DPadY = 0.760000
DPadScale = 1.150000
ShowTouchDpad = True
DPadSpacing = 1.000000
StartKeyX = 0.559896
StartKeyY = 0.942500
StartKeyScale = 1.150000
ShowTouchStart = True
SelectKeyX = 0.500000
SelectKeyY = 0.942500
SelectKeyScale = 1.150000
ShowTouchSelect = True
UnthrottleKeyX = 0.440104
UnthrottleKeyY = 0.942500
UnthrottleKeyScale = 1.150000
ShowTouchUnthrottle = True
LKeyX = 0.035937
LKeyY = 0.635833
LKeyScale = 1.150000
ShowTouchLTrigger = True
RKeyX = 0.964063
RKeyY = 0.635833
RKeyScale = 1.150000
ShowTouchRTrigger = True
AnalogStickX = 0.074479
AnalogStickY = 0.923333
AnalogStickScale = 1.150000
ShowAnalogStick = True
fcombo0X = 0.571875
fcombo0Y = 0.500000
comboKeyScale0 = 1.150000
ShowComboKey0 = False
fcombo1X = 0.631771
fcombo1Y = 0.500000
comboKeyScale1 = 1.150000
ShowComboKey1 = False
fcombo2X = 0.691667
fcombo2Y = 0.500000
comboKeyScale2 = 1.150000
ShowComboKey2 = False
fcombo3X = 0.571875
fcombo3Y = 0.333333
comboKeyScale3 = 1.150000
ShowComboKey3 = False
fcombo4X = 0.631771
fcombo4Y = 0.333333
comboKeyScale4 = 1.150000
ShowComboKey4 = False
Speed1KeyX = 0.440104
Speed1KeyY = 0.885000
Speed1KeyScale = 1.150000
ShowSpeed1Key = False
Speed2KeyX = 0.500000
Speed2KeyY = 0.885000
Speed2KeyScale = 1.150000
ShowSpeed2Key = False
XInputAnalogSensitivity = 1.000000
AnalogLimiterDeadzone = 0.600000
UseMouse = False
MapMouse = False
ConfineMap = False
MouseSensitivity = 0.100000
MouseSmoothing = 0.900000
ComboKey0Toggle = False
ComboKey1Toggle = False
ComboKey2Toggle = False
ComboKey3Toggle = False
ComboKey4Toggle = False
AnalogAutoRotSpeed = 15.000000
TouchSnapToGrid = False
TouchSnapGridSize = 64
RightAnalogStickX = 0.875000
RightAnalogStickY = 0.856250
RightAnalogStickScale = 1.150000
ShowRightAnalogStick = False
RapidFireKeyX = 0.619792
RapidFireKeyY = 0.784375
RapidFireKeyScale = 1.150000
ShowRapidFireKey = False
AnalogRotationCWKeyX = 0.500000
AnalogRotationKeyCWY = 0.676562
AnalogRotationKeyCWScale = 1.150000
ShowAnalogRotationCWKey = False
AnalogRotationCCWKeyX = 0.380208
AnalogRotationKeyCCWY = 0.676562
AnalogRotationKeyCCWScale = 1.150000
ShowAnalogRotationCCWKey = False
Custom0Mapping = 0x0000000000000000
Custom0Image = 0
Custom0Shape = 0
Custom0Toggle = False
Custom1Mapping = 0x0000000000000000
Custom1Image = 1
Custom1Shape = 0
Custom1Toggle = False
Custom2Mapping = 0x0000000000000000
Custom2Image = 2
Custom2Shape = 0
Custom2Toggle = False
Custom3Mapping = 0x0000000000000000
Custom3Image = 3
Custom3Shape = 0
Custom3Toggle = False
Custom4Mapping = 0x0000000000000000
Custom4Image = 4
Custom4Shape = 0
Custom4Toggle = False
Custom5Mapping = 0x0000000000000000
Custom5Image = 0
Custom5Shape = 1
Custom5Toggle = False
Custom6Mapping = 0x0000000000000000
Custom6Image = 1
Custom6Shape = 1
Custom6Toggle = False
Custom7Mapping = 0x0000000000000000
Custom7Image = 2
Custom7Shape = 1
Custom7Toggle = False
Custom8Mapping = 0x0000000000000000
Custom8Image = 3
Custom8Shape = 1
Custom8Toggle = False
Custom9Mapping = 0x0000000000000000
Custom9Image = 4
Custom9Shape = 1
Custom9Toggle = False
fcombo5X = 0.428125
fcombo5Y = 0.500000
comboKeyScale5 = 1.150000
ShowComboKey5 = False
fcombo6X = 0.368229
fcombo6Y = 0.500000
comboKeyScale6 = 1.150000
ShowComboKey6 = False
fcombo7X = 0.308333
fcombo7Y = 0.500000
comboKeyScale7 = 1.150000
ShowComboKey7 = False
fcombo8X = 0.428125
fcombo8Y = 0.333333
comboKeyScale8 = 1.150000
ShowComboKey8 = False
fcombo9X = 0.368229
fcombo9Y = 0.333333
comboKeyScale9 = 1.150000
ShowComboKey9 = False
AnalogDeadzone = 0.150000
AnalogInverseDeadzone = 0.000000
AnalogSensitivity = 1.100000
AnalogIsCircular = False
LeftStickHeadScale = 1.000000
RightStickHeadScale = 1.000000
HideStickBackground = False
SystemControls = True
[Network]
EnableWlan = False
EnableAdhocServer = False
proAdhocServer = myneighborsushicat.com
PortOffset = 0
MinTimeout = 1
TCPNoDelay = False
EnableUPnP = False
UPnPUseOriginalPort = True
EnableNetworkChat = False
ChatButtonPosition = 0
ChatScreenPosition = 0
EnableQuickChat = True
QuickChat1 = Quick Chat 1
QuickChat2 = Quick Chat 2
QuickChat3 = Quick Chat 3
QuickChat4 = Quick Chat 4
QuickChat5 = Quick Chat 5
ForcedFirstConnect = False
[SystemParam]
PSPModel = 0
PSPFirmwareVersion = 660
NickName = PPSSPP
proAdhocServer = black-seraph.com
MacAddress = 4e:7a:78:d9:49:32
PortOffset = 0
Language = 1
TimeFormat = 1
DateFormat = 1
TimeZone = 0
DayLightSavings = False
ButtonPreference = 1
LockParentalLevel = 0
WlanAdhocChannel = 0
WlanPowerSave = False
EncryptSave = True
SavedataUpgradeVersion = True
ParamTimeFormat = 0
ParamDateFormat = 0
MemStickSize = 16
[Debugger]
DisasmWindowX = -1
DisasmWindowY = -1
DisasmWindowW = -1
DisasmWindowH = -1
GEWindowX = -1
GEWindowY = -1
GEWindowW = -1
GEWindowH = -1
ConsoleWindowX = -1
ConsoleWindowY = -1
FontWidth = 8
FontHeight = 12
DisplayStatusBar = True
ShowBottomTabTitles = True
ShowDeveloperMenu = False
SkipDeadbeefFilling = False
FuncHashMap = False
DrawFrameGraph = False
MemInfoDetailed = False
[Upgrade]
UpgradeMessage =
UpgradeVersion = 1.12.0
DismissedVersion =
[Theme]
ItemStyleFg = 0xffffffff
ItemStyleBg = 0x55000000
ItemFocusedStyleFg = 0xffffffff
ItemFocusedStyleBg = 0xffedc24c
ItemDownStyleFg = 0xffffffff
ItemDownStyleBg = 0xffbd9939
ItemDisabledStyleFg = 0x80eeeeee
ItemDisabledStyleBg = 0x55e0d4af
ItemHighlightedStyleFg = 0xffffffff
ItemHighlightedStyleBg = 0x55bdbb39
ButtonStyleFg = 0xffffffff
ButtonStyleBg = 0x55000000
ButtonFocusedStyleFg = 0xffffffff
ButtonFocusedStyleBg = 0xffedc24c
ButtonDownStyleFg = 0xffffffff
ButtonDownStyleBg = 0xffbd9939
ButtonDisabledStyleFg = 0x80eeeeee
ButtonDisabledStyleBg = 0x55e0d4af
ButtonHighlightedStyleFg = 0xffffffff
ButtonHighlightedStyleBg = 0x55bdbb39
HeaderStyleFg = 0xffffffff
InfoStyleFg = 0xffffffff
InfoStyleBg = 0x00000000
PopupTitleStyleFg = 0xffe3be59
PopupStyleFg = 0xffffffff
PopupStyleBg = 0xff303030
[Recent]
MaxRecent = 30
[Log]
SYSTEMEnabled = True
SYSTEMLevel = 4
BOOTEnabled = True
BOOTLevel = 4
COMMONEnabled = True
COMMONLevel = 4
CPUEnabled = True
CPULevel = 4
FILESYSEnabled = True
FILESYSLevel = 4
G3DEnabled = True
G3DLevel = 4
HLEEnabled = True
HLELevel = 4
JITEnabled = True
JITLevel = 4
LOADEREnabled = True
LOADERLevel = 4
MEEnabled = True
MELevel = 4
MEMMAPEnabled = True
MEMMAPLevel = 4
SASMIXEnabled = True
SASMIXLevel = 4
SAVESTATEEnabled = True
SAVESTATELevel = 4
FRAMEBUFEnabled = True
FRAMEBUFLevel = 4
SCEAUDIOEnabled = True
SCEAUDIOLevel = 4
SCECTRLEnabled = True
SCECTRLLevel = 4
SCEDISPEnabled = True
SCEDISPLevel = 4
SCEFONTEnabled = True
SCEFONTLevel = 4
SCEGEEnabled = True
SCEGELevel = 4
SCEINTCEnabled = True
SCEINTCLevel = 4
SCEIOEnabled = True
SCEIOLevel = 4
SCEKERNELEnabled = True
SCEKERNELLevel = 4
SCEMODULEEnabled = True
SCEMODULELevel = 4
SCENETEnabled = True
SCENETLevel = 4
SCERTCEnabled = True
SCERTCLevel = 4
SCESASEnabled = True
SCESASLevel = 4
SCEUTILEnabled = True
SCEUTILLevel = 4
SCEMISCEnabled = True
SCEMISCLevel = 4
AUDIOEnabled = True
AUDIOLevel = 2
IOEnabled = True
IOLevel = 2
[PostShaderSetting]
BloomSettingValue1 = 0.600000
BloomSettingValue2 = 0.500000
CRTSettingValue1 = 1.000000
CartoonSettingValue1 = 0.500000
ColorCorrectionSettingValue1 = 1.000000
ColorCorrectionSettingValue2 = 1.000000
ColorCorrectionSettingValue3 = 1.000000
ColorCorrectionSettingValue4 = 1.000000
ScanlinesSettingValue1 = 1.000000
ScanlinesSettingValue2 = 0.500000
SharpenSettingValue1 = 1.500000

View file

@ -3,7 +3,7 @@
PKG_NAME="amiberry" PKG_NAME="amiberry"
PKG_ARCH="arm aarch64" PKG_ARCH="arm aarch64"
PKG_VERSION="bd47107842453368024b4a76530159e64bd30ab8" PKG_VERSION="59d6cc9986f41b59f78f5c30d2d98ed3b955d39e"
PKG_LICENSE="GPLv3" PKG_LICENSE="GPLv3"
PKG_SITE="https://github.com/midwan/amiberry" PKG_SITE="https://github.com/midwan/amiberry"
PKG_URL="${PKG_SITE}.git" PKG_URL="${PKG_SITE}.git"

View file

@ -0,0 +1 @@
RG353P

View file

@ -0,0 +1,148 @@
[General]
LastFilename =
ShowLag = False
ShowFrameCount = False
ISOPaths = 1
RecursiveISOPaths = False
NANDRootPath =
WirelessMac =
[Interface]
ConfirmStop = True
UsePanicHandlers = True
OnScreenDisplayMessages = True
HideCursor = False
AutoHideCursor = False
MainWindowPosX = 403
MainWindowPosY = 148
MainWindowWidth = 800
MainWindowHeight = 600
Language = 0
ShowToolbar = True
ShowStatusbar = True
ShowLogWindow = False
ShowLogConfigWindow = False
ExtendedFPSInfo = False
ThemeName40 = Clean Blue
PauseOnFocusLost = False
[Display]
FullscreenResolution = Auto
Fullscreen = True
RenderToMain = False
RenderWindowXPos = -1
RenderWindowYPos = -1
RenderWindowWidth = 640
RenderWindowHeight = 480
RenderWindowAutoSize = False
KeepWindowOnTop = False
ProgressiveScan = False
PAL60 = True
DisableScreenSaver = True
ForceNTSCJ = False
[GameList]
ListDrives = False
ListWad = True
ListElfDol = True
ListWii = True
ListGC = True
ListJap = True
ListPal = True
ListUsa = True
ListAustralia = True
ListFrance = True
ListGermany = True
ListItaly = True
ListKorea = True
ListNetherlands = True
ListRussia = True
ListSpain = True
ListTaiwan = True
ListWorld = True
ListUnknown = True
ListSort = 3
ListSortSecondary = 0
ColorCompressed = True
ColumnPlatform = True
ColumnBanner = True
ColumnNotes = True
ColumnFileName = False
ColumnID = False
ColumnRegion = True
ColumnSize = True
ColumnState = True
[Core]
HLE_BS2 = False
TimingVariance = 40
CPUCore = 4
Fastmem = True
CPUThread = True
DSPHLE = True
SkipIdle = True
SyncOnSkipIdle = True
SyncGPU = False
SyncGpuMaxDistance = 200000
SyncGpuMinDistance = -200000
SyncGpuOverclock = 1.00000000
FPRF = False
AccurateNaNs = False
DefaultISO =
DVDRoot =
Apploader =
EnableCheats = True
SelectedLanguage = 0
OverrideGCLang = False
DPL2Decoder = False
Latency = 2
MemcardAPath =
MemcardBPath =
AgpCartAPath =
AgpCartBPath =
SlotA = 1
SlotB = 255
SerialPort1 = 255
BBA_MAC =
SIDevice0 = 6
AdapterRumble0 = True
SimulateKonga0 = False
SIDevice1 = 6
AdapterRumble1 = True
SimulateKonga1 = False
SIDevice2 = 0
AdapterRumble2 = True
SimulateKonga2 = False
SIDevice3 = 0
AdapterRumble3 = True
SimulateKonga3 = False
WiiSDCard = False
WiiKeyboard = False
WiimoteContinuousScanning = False
WiimoteEnableSpeaker = False
RunCompareServer = False
RunCompareClient = False
EmulationSpeed = 1.00000000
FrameSkip = 0x00000003
Overclock = 4.00000000
OverclockEnable = False
GFXBackend =
GPUDeterminismMode = auto
PerfMapDir =
[Movie]
PauseMovie = False
Author =
DumpFrames = False
DumpFramesSilent = False
ShowInputDisplay = False
[DSP]
EnableJIT = True
DumpAudio = False
DumpUCode = False
Backend = ALSA
Volume = 100
CaptureLog = False
[Input]
BackgroundInput = False
[FifoPlayer]
LoopReplay = True
[Analytics]
ID = 5082f0c30a7e422b1220107f69d6c108
Enabled = False
PermissionAsked = True

View file

@ -0,0 +1,29 @@
[GCPad1]
Device = evdev/0/retrogame_joypad
Buttons/A = Button 0
Buttons/B = Button 1
Buttons/Start = Button 9
Buttons/X = Button 3
Buttons/Y = Button 2
Buttons/Z = Button 7
Buttons/Hotkey = Button 8
C-Stick/Dead Zone = 25.000000000000000
C-Stick/Down = Axis 3+
C-Stick/Left = Axis 2-
C-Stick/Modifier = Control_L
C-Stick/Modifier/Range = 50.000000000000000
C-Stick/Right = Axis 2+
C-Stick/Up = Axis 3-
D-Pad/Down = Button 14
D-Pad/Left = Button 15
D-Pad/Right = Button 16
D-Pad/Up = Button 13
Main Stick/Dead Zone = 25.000000000000000
Main Stick/Down = Axis 1+
Main Stick/Left = Axis 0-
Main Stick/Modifier = Shift_L
Main Stick/Modifier/Range = 50.000000000000000
Main Stick/Right = Axis 0+
Main Stick/Up = Axis 1-
Triggers/L = Button 4
Triggers/R = Button 5

View file

@ -0,0 +1,55 @@
[Hardware]
VSync = False
Adapter = 0
[Settings]
AspectRatio = 2
Crop = False
wideScreenHack = False
UseXFB = False
UseRealXFB = False
SafeTextureCacheColorSamples = 128
ShowFPS = False
LogRenderTimeToFile = False
OverlayStats = False
OverlayProjStats = False
DumpTextures = False
HiresTextures = False
ConvertHiresTextures = False
CacheHiresTextures = False
DumpEFBTarget = False
FreeLook = False
UseFFV1 = False
EnablePixelLighting = False
FastDepthCalc = True
MSAA = 1
SSAA = False
EFBScale = 2
TexFmtOverlayEnable = False
TexFmtOverlayCenter = False
Wireframe = False
DisableFog = False
EnableShaderDebugging = False
BorderlessFullscreen = False
SWZComploc = True
SWZFreeze = True
SWDumpObjects = False
SWDumpTevStages = False
SWDumpTevTexFetches = False
SWDrawStart = 0
SWDrawEnd = 100000
[Enhancements]
ForceFiltering = False
MaxAnisotropy = 0
PostProcessingShader =
[Stereoscopy]
StereoMode = 0
StereoDepth = 20
StereoConvergencePercentage = 100
StereoSwapEyes = False
[Hacks]
EFBAccessEnable = False
BBoxEnable = False
ForceProgressive = True
EFBToTextureEnable = True
EFBScaledCopy = False
EFBEmulateFormatChanges = False

View file

@ -0,0 +1,148 @@
[General]
LastFilename =
ShowLag = False
ShowFrameCount = False
ISOPaths = 1
RecursiveISOPaths = False
NANDRootPath =
WirelessMac =
[Interface]
ConfirmStop = True
UsePanicHandlers = True
OnScreenDisplayMessages = True
HideCursor = False
AutoHideCursor = False
MainWindowPosX = 403
MainWindowPosY = 148
MainWindowWidth = 800
MainWindowHeight = 600
Language = 0
ShowToolbar = True
ShowStatusbar = True
ShowLogWindow = False
ShowLogConfigWindow = False
ExtendedFPSInfo = False
ThemeName40 = Clean Blue
PauseOnFocusLost = False
[Display]
FullscreenResolution = Auto
Fullscreen = True
RenderToMain = False
RenderWindowXPos = -1
RenderWindowYPos = -1
RenderWindowWidth = 640
RenderWindowHeight = 480
RenderWindowAutoSize = False
KeepWindowOnTop = False
ProgressiveScan = False
PAL60 = True
DisableScreenSaver = True
ForceNTSCJ = False
[GameList]
ListDrives = False
ListWad = True
ListElfDol = True
ListWii = True
ListGC = True
ListJap = True
ListPal = True
ListUsa = True
ListAustralia = True
ListFrance = True
ListGermany = True
ListItaly = True
ListKorea = True
ListNetherlands = True
ListRussia = True
ListSpain = True
ListTaiwan = True
ListWorld = True
ListUnknown = True
ListSort = 3
ListSortSecondary = 0
ColorCompressed = True
ColumnPlatform = True
ColumnBanner = True
ColumnNotes = True
ColumnFileName = False
ColumnID = False
ColumnRegion = True
ColumnSize = True
ColumnState = True
[Core]
HLE_BS2 = False
TimingVariance = 40
CPUCore = 4
Fastmem = True
CPUThread = True
DSPHLE = True
SkipIdle = True
SyncOnSkipIdle = True
SyncGPU = False
SyncGpuMaxDistance = 200000
SyncGpuMinDistance = -200000
SyncGpuOverclock = 1.00000000
FPRF = False
AccurateNaNs = False
DefaultISO =
DVDRoot =
Apploader =
EnableCheats = True
SelectedLanguage = 0
OverrideGCLang = False
DPL2Decoder = False
Latency = 2
MemcardAPath =
MemcardBPath =
AgpCartAPath =
AgpCartBPath =
SlotA = 1
SlotB = 255
SerialPort1 = 255
BBA_MAC =
SIDevice0 = 6
AdapterRumble0 = True
SimulateKonga0 = False
SIDevice1 = 6
AdapterRumble1 = True
SimulateKonga1 = False
SIDevice2 = 0
AdapterRumble2 = True
SimulateKonga2 = False
SIDevice3 = 0
AdapterRumble3 = True
SimulateKonga3 = False
WiiSDCard = False
WiiKeyboard = False
WiimoteContinuousScanning = False
WiimoteEnableSpeaker = False
RunCompareServer = False
RunCompareClient = False
EmulationSpeed = 1.00000000
FrameSkip = 0x00000003
Overclock = 4.00000000
OverclockEnable = False
GFXBackend =
GPUDeterminismMode = auto
PerfMapDir =
[Movie]
PauseMovie = False
Author =
DumpFrames = False
DumpFramesSilent = False
ShowInputDisplay = False
[DSP]
EnableJIT = True
DumpAudio = False
DumpUCode = False
Backend = ALSA
Volume = 100
CaptureLog = False
[Input]
BackgroundInput = False
[FifoPlayer]
LoopReplay = True
[Analytics]
ID = 5082f0c30a7e422b1220107f69d6c108
Enabled = False
PermissionAsked = True

View file

@ -0,0 +1,30 @@
[GCPad1]
Device = evdev/0/Microsoft X-Box 360 pad
Buttons/A = Button 1
Buttons/B = Button 0
Buttons/Start = Button 7
Buttons/X = Button 3
Buttons/Y = Button 2
Buttons/Z = Button 5
C-Stick/Dead Zone = 25.000000000000000
C-Stick/Down = Axis 4+
C-Stick/Left = Axis 3-
C-Stick/Modifier = Control_L
C-Stick/Modifier/Range = 50.000000000000000
C-Stick/Right = Axis 3+
C-Stick/Up = Axis 4-
D-Pad/Down = Axis 7+
D-Pad/Left = Axis 6-
D-Pad/Right = Axis 6+
D-Pad/Up = Axis 7-
Main Stick/Dead Zone = 25.000000000000000
Main Stick/Down = Axis 1+
Main Stick/Left = Axis 0-
Main Stick/Modifier = Shift_L
Main Stick/Modifier/Range = 50.000000000000000
Main Stick/Right = Axis 0+
Main Stick/Up = Axis 1-
Triggers/L = Axis 2+
Triggers/L = Axis 2+
Triggers/R = Axis 5+
Triggers/R = Axis 5+

View file

@ -0,0 +1,55 @@
[Hardware]
VSync = False
Adapter = 0
[Settings]
AspectRatio = 2
Crop = False
wideScreenHack = False
UseXFB = False
UseRealXFB = False
SafeTextureCacheColorSamples = 128
ShowFPS = False
LogRenderTimeToFile = False
OverlayStats = False
OverlayProjStats = False
DumpTextures = False
HiresTextures = False
ConvertHiresTextures = False
CacheHiresTextures = False
DumpEFBTarget = False
FreeLook = False
UseFFV1 = False
EnablePixelLighting = False
FastDepthCalc = True
MSAA = 1
SSAA = False
EFBScale = 2
TexFmtOverlayEnable = False
TexFmtOverlayCenter = False
Wireframe = False
DisableFog = False
EnableShaderDebugging = False
BorderlessFullscreen = False
SWZComploc = True
SWZFreeze = True
SWDumpObjects = False
SWDumpTevStages = False
SWDumpTevTexFetches = False
SWDrawStart = 0
SWDrawEnd = 100000
[Enhancements]
ForceFiltering = False
MaxAnisotropy = 0
PostProcessingShader =
[Stereoscopy]
StereoMode = 0
StereoDepth = 20
StereoConvergencePercentage = 100
StereoSwapEyes = False
[Hacks]
EFBAccessEnable = False
BBoxEnable = False
ForceProgressive = True
EFBToTextureEnable = True
EFBScaledCopy = False
EFBEmulateFormatChanges = False

View file

@ -2,36 +2,85 @@
# Copyright (C) 2022-present BrooksyTech (https://github.com/brooksytech) # Copyright (C) 2022-present BrooksyTech (https://github.com/brooksytech)
PKG_NAME="dolphinsa" PKG_NAME="dolphinsa"
PKG_VERSION="0b160db48796f727311cea16072174d96b784f80"
PKG_GIT_CLONE_BRANCH="egldrm"
PKG_ARCH="aarch64"
PKG_LICENSE="GPLv2" PKG_LICENSE="GPLv2"
PKG_SITE="https://github.com/rtissera/dolphin"
PKG_URL="$PKG_SITE.git"
PKG_DEPENDS_TARGET="toolchain libevdev libdrm ffmpeg zlib libpng lzo libusb" PKG_DEPENDS_TARGET="toolchain libevdev libdrm ffmpeg zlib libpng lzo libusb"
PKG_LONGDESC="Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements. " PKG_LONGDESC="Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements. "
PKG_CMAKE_OPTS_TARGET=" -DENABLE_HEADLESS=ON \ case ${DEVICE} in
-DENABLE_EGL=ON \ RG552|handheld)
-DENABLE_EVDEV=ON \ PKG_SITE="https://github.com/dolphin-emu/dolphin"
-DLINUX_LOCAL_DEV=ON \ PKG_URL="${PKG_SITE}.git"
-DOpenGL_GL_PREFERENCE=GLVND \ PKG_VERSION="d0ed09ab6fe8e19a64e8f1bb2867f9c439616d4c"
-DENABLE_TESTS=OFF \ PKG_PATCH_DIRS+=" new"
-DENABLE_LLVM=OFF \ ;;
-DENABLE_ANALYTICS=OFF \ *)
-DENABLE_X11=OFF \ PKG_SITE="https://github.com/rtissera/dolphin"
-DENABLE_LTO=ON \ PKG_URL="${PKG_SITE}.git"
-DENABLE_QT=OFF \ PKG_VERSION="0b160db48796f727311cea16072174d96b784f80"
-DENCODE_FRAMEDUMPS=OFF" PKG_GIT_CLONE_BRANCH="egldrm"
PKG_PATCH_DIRS+=" legacy"
;;
esac
if [ ! "${OPENGL}" = "no" ]; then
PKG_DEPENDS_TARGET+=" ${OPENGL} glu libglvnd"
PKG_CONFIGURE_OPTS_TARGET+=" -DENABLE_X11=OFF \
-DENABLE_EGL=ON"
fi
if [ "${OPENGLES_SUPPORT}" = yes ]; then
PKG_DEPENDS_TARGET+=" ${OPENGLES}"
PKG_CONFIGURE_OPTS_TARGET+=" -DENABLE_X11=OFF \
-DENABLE_EGL=ON"
fi
if [ "${DISPLAYSERVER}" = "wl" ]; then
PKG_DEPENDS_TARGET+=" wayland ${WINDOWMANAGER} xorg-server xrandr libXi"
PKG_CONFIGURE_OPTS_TARGET+=" -DENABLE_X11=ON \
-DENABLE_EGL=ON"
fi
if [ "${VULKAN_SUPPORT}" = "yes" ]
then
PKG_DEPENDS_TARGET+=" vulkan-loader vulkan-headers"
PKG_CONFIGURE_OPTS_TARGET+=" -DENABLE_VULKAN=ON"
fi
PKG_CMAKE_OPTS_TARGET+=" -DENABLE_HEADLESS=ON \
-DENABLE_EVDEV=ON \
-DTHREADS_PTHREAD_ARG=OFF \
-DUSE_DISCORD_PRESENCE=OFF \
-DBUILD_SHARED_LIBS=OFF \
-DUSE_MGBA=OFF \
-DLINUX_LOCAL_DEV=ON \
-DENABLE_TESTS=OFF \
-DENABLE_LLVM=OFF \
-DENABLE_ANALYTICS=OFF \
-DENABLE_LTO=ON \
-DENABLE_QT=OFF \
-DENCODE_FRAMEDUMPS=OFF"
makeinstall_target() { makeinstall_target() {
mkdir -p $INSTALL/usr/bin mkdir -p ${INSTALL}/usr/bin
cp -rf $PKG_BUILD/.${TARGET_NAME}/Binaries/dolphin* $INSTALL/usr/bin cp -rf ${PKG_BUILD}/.${TARGET_NAME}/Binaries/dolphin* ${INSTALL}/usr/bin
cp -rf $PKG_DIR/scripts/* $INSTALL/usr/bin cp -rf ${PKG_DIR}/scripts/* ${INSTALL}/usr/bin
chmod +x ${INSTALL}/usr/bin/dolphin.sh chmod +x ${INSTALL}/usr/bin/start_dolphin.sh
mkdir -p $INSTALL/usr/config/dolphin-emu mkdir -p ${INSTALL}/usr/config/dolphin-emu
cp -rf $PKG_BUILD/Data/Sys/* $INSTALL/usr/config/dolphin-emu cp -rf ${PKG_BUILD}/Data/Sys/* ${INSTALL}/usr/config/dolphin-emu
cp -rf $PKG_DIR/config/* $INSTALL/usr/config/dolphin-emu cp -rf ${PKG_DIR}/config/${DEVICE}/* ${INSTALL}/usr/config/dolphin-emu
}
post_install() {
case ${DEVICE} in
RG503|RG353P)
DOLPHIN_PLATFORM="drm"
;;
*)
DOLPHIN_PLATFORM="x11"
;;
esac
sed -e "s/@DOLPHIN_PLATFORM@/${DOLPHIN_PLATFORM}/g" \
-i ${INSTALL}/usr/bin/start_dolphin.sh
} }

View file

@ -0,0 +1,111 @@
diff --git a/Source/Core/InputCommon/ControllerInterface/evdev/evdev.cpp b/Source/Core/InputCommon/ControllerInterface/evdev/evdev.cpp
index 6df37b4..64ade4a 100644
--- a/Source/Core/InputCommon/ControllerInterface/evdev/evdev.cpp
+++ b/Source/Core/InputCommon/ControllerInterface/evdev/evdev.cpp
@@ -392,6 +392,65 @@ void Init()
StartHotplugThread();
}
+struct joypad_udev_entry
+{
+ const char *devnode;
+ struct udev_device *dev;
+};
+
+int isNumber(const char *s) {
+ int n;
+
+ if(strlen(s) == 0) {
+ return 0;
+ }
+
+ for(n=0; n<strlen(s); n++) {
+ if(!(s[n] == '0' || s[n] == '1' || s[n] == '2' || s[n] == '3' || s[n] == '4' ||
+ s[n] == '5' || s[n] == '6' || s[n] == '7' || s[n] == '8' || s[n] == '9'))
+ return 0;
+ }
+ return 1;
+}
+
+// compare /dev/input/eventX and /dev/input/eventY where X and Y are numbers
+int strcmp_events(const char* x, const char* y) {
+
+ // find a common string
+ int n, common, is_number;
+ int a, b;
+
+ n=0;
+ while(x[n] == y[n] && x[n] != '\0' && y[n] != '\0') {
+ n++;
+ }
+ common = n;
+
+ // check if remaining string is a number
+ is_number = 1;
+ if(isNumber(x+common) == 0) is_number = 0;
+ if(isNumber(y+common) == 0) is_number = 0;
+
+ if(is_number == 1) {
+ a = atoi(x+common);
+ b = atoi(y+common);
+
+ if(a == b) return 0;
+ if(a < b) return -1;
+ return 1;
+ } else {
+ return strcmp(x, y);
+ }
+}
+
+/* Used for sorting devnodes to appear in the correct order */
+static int sort_devnodes(const void *a, const void *b)
+{
+ const struct joypad_udev_entry *aa = (const struct joypad_udev_entry *) a;
+ const struct joypad_udev_entry *bb = (const struct joypad_udev_entry *) b;
+ return strcmp_events(aa->devnode, bb->devnode);
+}
+
// Only call this when ControllerInterface::m_devices_population_mutex is locked
void PopulateDevices()
{
@@ -404,6 +463,10 @@ void PopulateDevices()
// We use udev to iterate over all /dev/input/event* devices.
// Note: the Linux kernel is currently limited to just 32 event devices. If
// this ever changes, hopefully udev will take care of this.
+ unsigned sorted_count = 0;
+ struct joypad_udev_entry sorted[64];
+ const char* devnode;
+ int i;
udev* const udev = udev_new();
ASSERT_MSG(CONTROLLERINTERFACE, udev != nullptr, "Couldn't initialize libudev.");
@@ -422,11 +485,25 @@ void PopulateDevices()
udev_device* dev = udev_device_new_from_syspath(udev, path);
- if (const char* devnode = udev_device_get_devnode(dev))
- AddDeviceNode(devnode);
-
- udev_device_unref(dev);
+ devnode = udev_device_get_devnode(dev);
+ if (devnode != NULL && sorted_count < 64) {
+ sorted[sorted_count].devnode = devnode;
+ sorted[sorted_count].dev = dev;
+ sorted_count++;
+ } else {
+ udev_device_unref(dev);
+ }
}
+
+ /* Sort the udev entries by devnode name so that they are
+ * created in the proper order */
+ qsort(sorted, sorted_count, sizeof(struct joypad_udev_entry), sort_devnodes);
+
+ for (i = 0; i < sorted_count; i++) {
+ AddDeviceNode(sorted[i].devnode);
+ udev_device_unref(sorted[i].dev);
+ }
+
udev_enumerate_unref(enumerate);
udev_unref(udev);
}

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,118 @@
diff --git a/Source/Core/Core/HW/GCPadEmu.cpp b/Source/Core/Core/HW/GCPadEmu.cpp
index c8e7016..fb089c4 100644
--- a/Source/Core/Core/HW/GCPadEmu.cpp
+++ b/Source/Core/Core/HW/GCPadEmu.cpp
@@ -26,6 +26,7 @@ static const u16 button_bitmasks[] = {
PAD_BUTTON_Y,
PAD_TRIGGER_Z,
PAD_BUTTON_START,
+ PAD_BUTTON_HOTKEY,
0 // MIC HAX
};
@@ -37,7 +38,7 @@ static const u16 trigger_bitmasks[] = {
static const u16 dpad_bitmasks[] = {PAD_BUTTON_UP, PAD_BUTTON_DOWN, PAD_BUTTON_LEFT,
PAD_BUTTON_RIGHT};
-static const char* const named_buttons[] = {"A", "B", "X", "Y", "Z", "Start"};
+static const char* const named_buttons[] = {"A", "B", "X", "Y", "Z", "Start", "Hotkey"};
static const char* const named_triggers[] = {
// i18n: The left trigger button (labeled L on real controllers)
diff --git a/Source/Core/DolphinNoGUI/PlatformDRM.cpp b/Source/Core/DolphinNoGUI/PlatformDRM.cpp
index b210cea..77d4e86 100644
--- a/Source/Core/DolphinNoGUI/PlatformDRM.cpp
+++ b/Source/Core/DolphinNoGUI/PlatformDRM.cpp
@@ -11,6 +11,12 @@
#include "Core/Core.h"
#include "Core/State.h"
+#include "Core/HW/GCPad.h"
+#include "InputCommon/GCPadStatus.h"
+#include <fmt/format.h>
+#include "Core/Config/GraphicsSettings.h"
+#include "VideoCommon/VideoConfig.h"
+
#include <climits>
#include <cstdio>
@@ -54,9 +60,67 @@ void PlatformDRM::MainLoop()
{
while (IsRunning())
{
+ static int hotkey = 0;
+ static int slot = 0;
+ static int stereo = 0;
+
UpdateRunningFlag();
Core::HostDispatchJobs();
+ if(Pad::IsInitialized()) {
+ GCPadStatus x = Pad::GetStatus(0);
+
+ if( (x.button & PAD_BUTTON_HOTKEY) == PAD_BUTTON_HOTKEY) { // hotkey pressed
+ if(hotkey == 1) {
+ hotkey = 2;
+ }
+ } else {
+ hotkey = 1; // assure hotkey is released between actions
+ }
+
+ if(hotkey == 2) { // hotkey pressed
+ if( (x.button & PAD_BUTTON_START) == PAD_BUTTON_START) {
+ RequestShutdown();
+ hotkey = 0;
+ }
+
+ if( (x.button & PAD_BUTTON_Y) == PAD_BUTTON_Y) {
+ State::Load(slot);
+ hotkey = 0;
+ }
+ if( (x.button & PAD_BUTTON_B) == PAD_BUTTON_B) {
+ State::Save(slot);
+ hotkey = 0;
+ }
+ if( (x.button & PAD_BUTTON_DOWN) == PAD_BUTTON_DOWN) {
+ if(slot > 0) slot--;
+ Core::DisplayMessage(fmt::format("Slot {} selected", slot), 4000);
+ hotkey = 0;
+ }
+ if( (x.button & PAD_BUTTON_UP) == PAD_BUTTON_UP) {
+ if(slot < 10) slot++;
+ Core::DisplayMessage(fmt::format("Slot {} selected", slot), 4000);
+ hotkey = 0;
+ }
+ if( (x.button & PAD_TRIGGER_L) == PAD_TRIGGER_L) {
+ Core::SaveScreenShot();
+ hotkey = 0;
+ }
+ if( (x.button & PAD_TRIGGER_R) == PAD_TRIGGER_R) {
+ if(stereo == 0) {
+ Config::SetCurrent(Config::GFX_STEREO_MODE, StereoMode::SBS);
+ stereo = 1;
+ } else {
+ Config::SetCurrent(Config::GFX_STEREO_MODE, StereoMode::Off);
+ stereo = 0;
+ }
+ hotkey = 0;
+ }
+ }
+
+ }
+ //
+
// TODO: Is this sleep appropriate?
std::this_thread::sleep_for(std::chrono::milliseconds(1));
}
diff --git a/Source/Core/InputCommon/GCPadStatus.h b/Source/Core/InputCommon/GCPadStatus.h
index 7da1bbd..57d294d 100644
--- a/Source/Core/InputCommon/GCPadStatus.h
+++ b/Source/Core/InputCommon/GCPadStatus.h
@@ -27,6 +27,7 @@ enum PadButton
PAD_BUTTON_X = 0x0400,
PAD_BUTTON_Y = 0x0800,
PAD_BUTTON_START = 0x1000,
+ PAD_BUTTON_HOTKEY = 0x2000,
};
struct GCPadStatus

View file

@ -0,0 +1,56 @@
diff --git a/Source/Core/Common/GL/GLInterface/EGLDRM.cpp b/Source/Core/Common/GL/GLInterface/EGLDRM.cpp
index f848761..676c886 100644
--- a/Source/Core/Common/GL/GLInterface/EGLDRM.cpp
+++ b/Source/Core/Common/GL/GLInterface/EGLDRM.cpp
@@ -819,37 +819,24 @@ static bool gfx_ctx_drm_set_video_mode(void* data, unsigned width, unsigned heig
if (!drm)
return false;
- /* Find desired video mode, and use that.
- * If not fullscreen, we get desired windowed size,
- * which is not appropriate. */
- if ((width == 0 && height == 0) || !fullscreen)
- drm->drm_mode = &drm->drm_connector->modes[0];
- else
+ // batocera - set resolution
{
- /* Try to match refresh_rate as closely as possible.
- *
- * Lower resolutions tend to have multiple supported
- * refresh rates as well.
- */
- float minimum_fps_diff = 0.0f;
-
- /* Find best match. */
- for (i = 0; i < drm->drm_connector->count_modes; i++)
- {
- float diff;
- if (width != drm->drm_connector->modes[i].hdisplay ||
- height != drm->drm_connector->modes[i].vdisplay)
- continue;
-
- diff = fabsf(drm->drm_connector->modes[i].vrefresh - video_refresh_rate);
-
- if (!drm->drm_mode || diff < minimum_fps_diff)
- {
- drm->drm_mode = &drm->drm_connector->modes[i];
- minimum_fps_diff = diff;
+ FILE* fdDrmMode;
+ int drmMode;
+ if((fdDrmMode = fopen("/var/run/drmMode", "r")) != NULL) {
+ if(fscanf(fdDrmMode, "%i", &drmMode) == 1) {
+ if(drmMode>=0 && drmMode<drm->drm_connector->count_modes) {
+ drmModeCrtc *pcrtc = drmModeGetCrtc(drm->drm_fd, drm->drm_encoder->crtc_id);
+ if(pcrtc != NULL) {
+ drmModeSetCrtc(drm->drm_fd, pcrtc->crtc_id, pcrtc->buffer_id, 0, 0, &drm->drm_connector->connector_id, 1, &drm->drm_connector->modes[drmMode]);
+ drm->drm_mode = &drm->drm_connector->modes[drmMode];
+ }
+ }
}
+ fclose(fdDrmMode);
}
}
+ //
if (!drm->drm_mode)
{

View file

@ -0,0 +1,13 @@
diff --git a/CMakeLists.txt b/CMakeLists.txt
index eb0f83f..9d41166 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -128,7 +128,7 @@ endif()
include(CCache)
# for revision info
-find_package(Git)
+#find_package(Git)
if(GIT_FOUND)
# make sure version information gets re-run when the current Git HEAD changes
execute_process(WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} COMMAND ${GIT_EXECUTABLE} rev-parse --git-path HEAD

View file

@ -0,0 +1,13 @@
--- a/Source/Core/VideoBackends/OGL/OGLRender.cpp 2020-12-31 00:27:53.998709857 +0100
+++ b/Source/Core/VideoBackends/OGL/OGLRender.cpp 2020-12-31 00:28:40.414557344 +0100
@@ -736,10 +736,6 @@
g_Config.VerifyValidity();
UpdateActiveConfig();
- OSD::AddMessage(fmt::format("Video Info: {}, {}, {}", g_ogl_config.gl_vendor,
- g_ogl_config.gl_renderer, g_ogl_config.gl_version),
- 5000);
-
if (!g_ogl_config.bSupportsGLBufferStorage && !g_ogl_config.bSupportsGLPinnedMemory)
{
OSD::AddMessage(fmt::format("Your OpenGL driver does not support {}_buffer_storage.",

View file

@ -0,0 +1,17 @@
diff --git a/Source/Core/DolphinQt/MainWindow.cpp b/Source/Core/DolphinQt/MainWindow.cpp
index 20572d8..b79b2a7 100644
--- a/Source/Core/DolphinQt/MainWindow.cpp
+++ b/Source/Core/DolphinQt/MainWindow.cpp
@@ -1768,7 +1768,12 @@ void MainWindow::Show()
// If the booting of a game was requested on start up, do that now
if (m_pending_boot != nullptr)
{
+ m_menu_bar->hide();
+ m_tool_bar->hide();
+ m_game_list->hide();
StartGame(std::move(m_pending_boot));
m_pending_boot.reset();
+ } else {
+ m_tool_bar->show();
}
}

View file

@ -0,0 +1,48 @@
diff --git a/Source/Core/Common/GL/GLInterface/EGLDRM.cpp b/Source/Core/Common/GL/GLInterface/EGLDRM.cpp
index 55efc47..b96768f 100644
--- a/Source/Core/Common/GL/GLInterface/EGLDRM.cpp
+++ b/Source/Core/Common/GL/GLInterface/EGLDRM.cpp
@@ -371,14 +371,33 @@ static bool drm_get_connector(GFXContextDRMData* drm, int fd)
unsigned i;
unsigned monitor_index_count = 0;
unsigned monitor = 1;
+ int drmConn = 0;
/* Enumerate all connectors. */
INFO_LOG(VIDEO, "[DRM]: Found %d connectors.\n", drm->drm_resources->count_connectors);
+ // batocera
+ {
+ FILE* fdDrmConn;
+ int drmConnRead;
+ if((fdDrmConn = fopen("/var/run/drmConn", "r")) != NULL) {
+ if(fscanf(fdDrmConn, "%i", &drmConnRead) == 1) {
+ if(drmConnRead>=0 && drmConn<drm->drm_resources->count_connectors) {
+ drmConn = drmConnRead;
+ }
+ }
+ }
+ }
+ //
+
for (i = 0; (int)i < drm->drm_resources->count_connectors; i++)
{
- drmModeConnectorPtr conn = drmModeGetConnector(fd, drm->drm_resources->connectors[i]);
+ drmModeConnectorPtr conn;
+
+ if(i != drmConn) continue;
+
+ conn = drmModeGetConnector(fd, drm->drm_resources->connectors[i]);
if (conn)
{
@@ -399,6 +418,8 @@ static bool drm_get_connector(GFXContextDRMData* drm, int fd)
for (i = 0; (int)i < drm->drm_resources->count_connectors; i++)
{
+ if(i != drmConn) continue;
+
drm->drm_connector = drmModeGetConnector(fd, drm->drm_resources->connectors[i]);
if (!drm->drm_connector)

View file

@ -18,4 +18,4 @@ rm -rf /storage/.local/share/dolphin-emu
ln -sfv /storage/.config/dolphin-emu /storage/.local/share/dolphin-emu ln -sfv /storage/.config/dolphin-emu /storage/.local/share/dolphin-emu
/usr/bin/dolphin-emu-nogui -p drm -a HLE -e "${1}" /usr/bin/dolphin-emu-nogui -p @DOLPHIN_PLATFORM@ -a HLE -e "${1}"

View file

@ -9,17 +9,15 @@ echo -e $(date -u)" - Script started.\n" >> /tmp/logs/dosbox_scan.log
EE_DEVICE=$(cat /ee_arch) EE_DEVICE=$(cat /ee_arch)
source /usr/bin/env.sh
source /etc/profile source /etc/profile
rp_registerAllModules rp_registerAllModules
joy2keyStart clear
clear >/dev/console
#rm "/storage/.config/dosbox/games/*.conf" #rm "/storage/.config/dosbox/games/*.conf"
function create_launcher() { function create_launcher() {
message_stream "\nAdding $2..." 0 echo "\nAdding $2..."
launcher_name="$1 ($2)" launcher_name="$1 ($2)"
cp /storage/.config/dosbox/dosbox-SDL2.conf "/storage/.config/dosbox/games/$launcher_name.conf" cp /storage/.config/dosbox/dosbox-SDL2.conf "/storage/.config/dosbox/games/$launcher_name.conf"
cat <<EOF >> "/storage/.config/dosbox/games/$launcher_name.conf" cat <<EOF >> "/storage/.config/dosbox/games/$launcher_name.conf"
@ -30,7 +28,7 @@ exit
EOF EOF
} }
message_stream "Scanning for games...\n" 0 echo "Scanning for games...\n"
OIFS="$IFS" OIFS="$IFS"
IFS=$'\n' IFS=$'\n'
@ -42,7 +40,7 @@ do
do do
echo "Testing (exe) $executable" echo "Testing (exe) $executable"
executable_case="$(basename "$executable" | tr '[:lower:]' '[:upper:]')" executable_case="$(basename "$executable" | tr '[:lower:]' '[:upper:]')"
echo "Case $executable" echo "Case $executable" >> /tmp/logs/dosbox_scan.log
case "$executable_case" in case "$executable_case" in
"SETUP.EXE" | "INSTALL.EXE" | "INSTALLER.EXE" | \ "SETUP.EXE" | "INSTALL.EXE" | "INSTALLER.EXE" | \
"APOGEE.BAT" | "CATALOG.EXE" | "DEALERS.EXE" | \ "APOGEE.BAT" | "CATALOG.EXE" | "DEALERS.EXE" | \
@ -66,7 +64,6 @@ do
done done
fi fi
done done
message_stream "Restarting EmulationStation...\n" 0 echo "Restarting EmulationStation...\n"
echo echo "Restarting EmulationStation..." >> /tmp/logs/dosbox_scan.log echo "Restarting EmulationStation..." >> /tmp/logs/dosbox_scan.log
systemctl restart emustation clear
clear >/dev/console

View file

@ -6,11 +6,11 @@
if [ ! -d "/storage/.config/drastic" ]; then if [ ! -d "/storage/.config/drastic" ]; then
echo "Drastic emulator not installed." >/dev/console 2>&1 echo "Drastic emulator not installed." 2>&1
echo "Please install through the Jelos Add Ons tool." >/dev/console 2>&1 echo "Please install through the Jelos Add Ons tool." 2>&1
sleep 5 sleep 5
clear >/dev/console clear
else else

View file

@ -0,0 +1 @@
RG503/

View file

@ -4,7 +4,7 @@ StartFullscreen = true
EmulationSpeed = 1.000000 EmulationSpeed = 1.000000
FastForwardSpeed = 0.000000 FastForwardSpeed = 0.000000
TurboSpeed = 0.000000 TurboSpeed = 0.000000
SyncToHostRefreshRate = true SyncToHostRefreshRate = false
IncreaseTimerResolution = true IncreaseTimerResolution = true
InhibitScreensaver = true InhibitScreensaver = true
StartPaused = false StartPaused = false
@ -38,7 +38,7 @@ ResolutionScale = 1
Multisamples = 1 Multisamples = 1
UseDebugDevice = false UseDebugDevice = false
PerSampleShading = false PerSampleShading = false
UseThread = false UseThread = true
ThreadedPresentation = true ThreadedPresentation = true
UseSoftwareRendererForReadbacks = false UseSoftwareRendererForReadbacks = false
TrueColor = false TrueColor = false
@ -61,7 +61,6 @@ PGXPDepthClearThreshold = 300.000000
[Display] [Display]
Rotate = 1
CropMode = Overscan CropMode = Overscan
ActiveStartOffset = 0 ActiveStartOffset = 0
ActiveEndOffset = 0 ActiveEndOffset = 0

View file

@ -0,0 +1,328 @@
[Main]
SettingsVersion = 3
EmulationSpeed = 1.000000
FastForwardSpeed = 0.000000
TurboSpeed = 0.000000
SyncToHostRefreshRate = false
IncreaseTimerResolution = true
InhibitScreensaver = true
StartPaused = false
StartFullscreen = true
PauseOnFocusLoss = false
PauseOnMenu = true
SaveStateOnExit = true
CreateSaveStateBackups = true
CompressSaveStates = true
ConfirmPowerOff = true
LoadDevicesFromSaveStates = false
ApplyCompatibilitySettings = true
ApplyGameSettings = true
AutoLoadCheats = true
DisableAllEnhancements = false
RewindEnable = false
RewindFrequency = 10.000000
RewindSaveSlots = 10
RunaheadFrameCount = 0
[Console]
Region = Auto
Enable8MBRAM = false
[CPU]
ExecutionMode = Recompiler
OverclockEnable = false
OverclockNumerator = 1
OverclockDenominator = 1
RecompilerMemoryExceptions = false
RecompilerBlockLinking = true
RecompilerICache = false
FastmemMode = MMap
[GPU]
Renderer = Software
Adapter =
ResolutionScale = 1
Multisamples = 1
UseDebugDevice = false
PerSampleShading = false
UseThread = true
ThreadedPresentation = true
UseSoftwareRendererForReadbacks = false
TrueColor = true
ScaledDithering = true
TextureFilter = Nearest
DownsampleMode = Disabled
DisableInterlacing = true
ForceNTSCTimings = false
WidescreenHack = false
ChromaSmoothing24Bit = false
PGXPEnable = false
PGXPCulling = true
PGXPTextureCorrection = true
PGXPVertexCache = false
PGXPCPU = false
PGXPPreserveProjFP = false
PGXPTolerance = -1.000000
PGXPDepthBuffer = false
PGXPDepthClearThreshold = 1228800.000000
FullscreenMode =
[Display]
CropMode = Overscan
ActiveStartOffset = 0
ActiveEndOffset = 0
LineStartOffset = 0
LineEndOffset = 0
Force4_3For24Bit = false
AspectRatio = Auto (Game Native)
CustomAspectRatioNumerator = 0
LinearFiltering = true
IntegerScaling = false
Stretch = false
PostProcessing = false
ShowOSDMessages = true
ShowFPS = false
ShowSpeed = false
ShowResolution = false
ShowCPU = false
ShowGPU = false
ShowStatusIndicators = true
ShowInputs = false
ShowEnhancements = false
DisplayAllFrames = false
InternalResolutionScreenshots = false
VSync = false
MaxFPS = 0.000000
OSDScale = 100.000000
[CDROM]
ReadaheadSectors = 8
RegionCheck = false
LoadImageToRAM = false
LoadImagePatches = false
MuteCDAudio = false
ReadSpeedup = 1
SeekSpeedup = 1
[Audio]
Backend = Cubeb
Driver =
StretchMode = TimeStretch
BufferMS = 50
OutputLatencyMS = 20
OutputVolume = 100
FastForwardVolume = 100
OutputMuted = false
DumpOnBoot = false
[Hacks]
DMAMaxSliceTicks = 1000
DMAHaltTicks = 100
GPUFIFOSize = 16
GPUMaxRunAhead = 128
[BIOS]
SearchDirectory = /storage/roms/bios
PathNTSCU =
PathNTSCJ =
PathPAL =
PatchTTYEnable = false
PatchFastBoot = true
[Controller1]
Type = AnalogController
[Controller2]
Type = None
[Controller3]
Type = None
[Controller4]
Type = None
[Controller5]
Type = None
[Controller6]
Type = None
[Controller7]
Type = None
[Controller8]
Type = None
[MemoryCards]
Card1Type = PerGameTitle
Card2Type = None
UsePlaylistTitle = true
Directory = memcards
[ControllerPorts]
MultitapMode = Disabled
PointerXScale = 8.000000
PointerYScale = 8.000000
PointerXInvert = false
PointerYInvert = false
[Cheevos]
Enabled = false
TestMode = false
UnofficialTestMode = false
UseFirstDiscFromPlaylist = true
RichPresence = false
ChallengeMode = false
[Logging]
LogLevel = Debug
LogFilter =
LogToConsole = true
LogToDebug = true
LogToWindow = false
LogToFile = true
[Debug]
ShowVRAM = false
DumpCPUToVRAMCopies = false
DumpVRAMToCPUCopies = false
ShowGPUState = false
ShowCDROMState = false
ShowSPUState = false
ShowTimersState = false
ShowMDECState = false
ShowDMAState = false
[TextureReplacements]
EnableVRAMWriteReplacements = false
PreloadTextures = false
DumpVRAMWrites = false
DumpVRAMWriteForceAlphaChannel = true
DumpVRAMWriteWidthThreshold = 128
DumpVRAMWriteHeightThreshold = 128
[Folders]
Cache = cache
Cheats = cheats
Covers = covers
Dumps = dump
GameSettings = gamesettings
InputProfiles = inputprofiles
SaveStates = savestates
Screenshots = screenshots
Shaders = shaders
Textures = textures
[InputSources]
SDL = true
SDLControllerEnhancedMode = false
Evdev = false
XInput = false
RawInput = false
[Pad1]
Type = AnalogController
Up = SDL-0/DPadUp
Right = SDL-0/DPadRight
Down = SDL-0/DPadDown
Left = SDL-0/DPadLeft
Triangle = SDL-0/X
Circle = SDL-0/A
Cross = SDL-0/B
Square = SDL-0/Y
Select = SDL-0/Back
Start = SDL-0/Start
L1 = SDL-0/LeftShoulder
R1 = SDL-0/RightShoulder
L2 = SDL-0/+LeftTrigger
R2 = SDL-0/+RightTrigger
L3 = SDL-0/LeftStick & SDL-0/-LeftX
R3 = SDL-0/RightStick
LLeft = SDL-0/-LeftX
LRight = SDL-0/+LeftX
LDown = SDL-0/+LeftY
LUp = SDL-0/-LeftY
RLeft = SDL-0/-RightX
RRight = SDL-0/+RightX
RDown = SDL-0/+RightY
RUp = SDL-0/-RightY
[Pad2]
Type = None
[Pad3]
Type = None
[Pad4]
Type = None
[Pad5]
Type = None
[Pad6]
Type = None
[Pad7]
Type = None
[Pad8]
Type = None
[Hotkeys]
Screenshot = SDL-0/Back & SDL-0/A
ToggleWidescreen = SDL-0/Back & SDL-0/Y
OpenPauseMenu = SDL-0/Back & SDL-0/X
LoadSelectedSaveState = SDL-0/Back & SDL-0/LeftShoulder
SaveSelectedSaveState = SDL-0/Back & SDL-0/RightShoulder
SelectPreviousSaveStateSlot = SDL-0/Back & SDL-0/+RightY
SelectNextSaveStateSlot = SDL-0/Back & SDL-0/-RightY
ToggleFastForward = SDL-0/Back & SDL-0/+RightTrigger
PowerOff = SDL-0/Back & SDL-0/Start
Reset = SDL-0/Back & SDL-0/B
ChangeDisc = SDL-0/Back & SDL-0/-RightX
SwapMemoryCards = SDL-0/Back & SDL-0/+RightX
Rewind = SDL-0/Back & SDL-0/+LeftTrigger
[NoGUI]
WindowX = 0
WindowY = 0
WindowWidth = 1920
WindowHeight = 1152
[GameList]
RecursivePaths = /storage/roms/psx

View file

@ -0,0 +1,316 @@
[Main]
SettingsVersion = 3
EmulationSpeed = 1.000000
FastForwardSpeed = 0.000000
TurboSpeed = 0.000000
SyncToHostRefreshRate = false
IncreaseTimerResolution = true
InhibitScreensaver = true
StartPaused = false
StartFullscreen = true
PauseOnFocusLoss = false
PauseOnMenu = true
SaveStateOnExit = true
CreateSaveStateBackups = true
CompressSaveStates = true
ConfirmPowerOff = true
LoadDevicesFromSaveStates = false
ApplyCompatibilitySettings = true
ApplyGameSettings = true
AutoLoadCheats = true
DisableAllEnhancements = false
RewindEnable = false
RewindFrequency = 10.000000
RewindSaveSlots = 10
RunaheadFrameCount = 0
[Console]
Region = Auto
Enable8MBRAM = false
[CPU]
ExecutionMode = Recompiler
OverclockEnable = false
OverclockNumerator = 1
OverclockDenominator = 1
RecompilerMemoryExceptions = false
RecompilerBlockLinking = true
RecompilerICache = false
FastmemMode = MMap
[GPU]
Renderer = OpenGL
Adapter =
ResolutionScale = 3
Multisamples = 1
UseDebugDevice = false
PerSampleShading = false
UseThread = true
ThreadedPresentation = true
UseSoftwareRendererForReadbacks = false
TrueColor = true
ScaledDithering = true
TextureFilter = Nearest
DownsampleMode = Disabled
DisableInterlacing = true
ForceNTSCTimings = false
WidescreenHack = false
ChromaSmoothing24Bit = false
PGXPEnable = false
PGXPCulling = true
PGXPTextureCorrection = true
PGXPVertexCache = false
PGXPCPU = false
PGXPPreserveProjFP = false
PGXPTolerance = -1.000000
PGXPDepthBuffer = false
PGXPDepthClearThreshold = 1228800.000000
[Display]
CropMode = Overscan
ActiveStartOffset = 0
ActiveEndOffset = 0
LineStartOffset = 0
LineEndOffset = 0
Force4_3For24Bit = false
AspectRatio = Auto (Game Native)
CustomAspectRatioNumerator = 0
LinearFiltering = true
IntegerScaling = false
Stretch = false
PostProcessing = false
ShowOSDMessages = true
ShowFPS = false
ShowSpeed = false
ShowResolution = false
ShowCPU = false
ShowGPU = false
ShowStatusIndicators = true
ShowInputs = false
ShowEnhancements = false
DisplayAllFrames = false
InternalResolutionScreenshots = false
VSync = false
MaxFPS = 0.000000
OSDScale = 100.000000
[CDROM]
ReadaheadSectors = 8
RegionCheck = false
LoadImageToRAM = false
LoadImagePatches = false
MuteCDAudio = false
ReadSpeedup = 1
SeekSpeedup = 1
[Audio]
Backend = Cubeb
Driver =
StretchMode = TimeStretch
BufferMS = 50
OutputLatencyMS = 20
OutputVolume = 100
FastForwardVolume = 100
OutputMuted = false
DumpOnBoot = false
[Hacks]
DMAMaxSliceTicks = 1000
DMAHaltTicks = 100
GPUFIFOSize = 16
GPUMaxRunAhead = 128
[BIOS]
PatchTTYEnable = false
PatchFastBoot = false
SearchDirectory = /storage/roms/bios
[Controller1]
Type = AnalogController
[Controller2]
Type = None
[Controller3]
Type = None
[Controller4]
Type = None
[Controller5]
Type = None
[Controller6]
Type = None
[Controller7]
Type = None
[Controller8]
Type = None
[MemoryCards]
Card1Type = PerGameTitle
Card2Type = None
UsePlaylistTitle = true
Directory = memcards
[ControllerPorts]
MultitapMode = Disabled
PointerXScale = 8.000000
PointerYScale = 8.000000
PointerXInvert = false
PointerYInvert = false
[Cheevos]
Enabled = false
TestMode = false
UnofficialTestMode = false
UseFirstDiscFromPlaylist = true
RichPresence = false
ChallengeMode = false
[Logging]
LogLevel = Info
LogFilter =
LogToConsole = true
LogToDebug = false
LogToWindow = false
LogToFile = false
[Debug]
ShowVRAM = false
DumpCPUToVRAMCopies = false
DumpVRAMToCPUCopies = false
ShowGPUState = false
ShowCDROMState = false
ShowSPUState = false
ShowTimersState = false
ShowMDECState = false
ShowDMAState = false
[TextureReplacements]
EnableVRAMWriteReplacements = false
PreloadTextures = false
DumpVRAMWrites = false
DumpVRAMWriteForceAlphaChannel = true
DumpVRAMWriteWidthThreshold = 128
DumpVRAMWriteHeightThreshold = 128
[Folders]
Cache = cache
Cheats = cheats
Covers = covers
Dumps = dump
GameSettings = gamesettings
InputProfiles = inputprofiles
SaveStates = savestates
Screenshots = screenshots
Shaders = shaders
Textures = textures
[InputSources]
SDL = true
SDLControllerEnhancedMode = false
Evdev = false
XInput = false
RawInput = false
[Pad1]
Type = AnalogController
Up = SDL-0/DPadUp
Right = SDL-0/DPadRight
Down = SDL-0/DPadDown
Left = SDL-0/DPadLeft
Triangle = SDL-0/Y
Circle = SDL-0/B
Cross = SDL-0/A
Square = SDL-0/X
Select = SDL-0/Back
Start = SDL-0/Start
L1 = SDL-0/LeftShoulder
R1 = SDL-0/RightShoulder
L2 = SDL-0/+LeftTrigger
R2 = SDL-0/+RightTrigger
L3 = SDL-0/LeftStick
R3 = SDL-0/RightStick
LLeft = SDL-0/-LeftX
LRight = SDL-0/+LeftX
LDown = SDL-0/+LeftY
LUp = SDL-0/-LeftY
RLeft = SDL-0/-RightX & SDL-0/-RightY
RRight = SDL-0/+RightX & SDL-0/+RightY
RDown = SDL-0/+RightY
RUp = SDL-0/-RightY
[Pad2]
Type = None
[Pad3]
Type = None
[Pad4]
Type = None
[Pad5]
Type = None
[Pad6]
Type = None
[Pad7]
Type = None
[Pad8]
Type = None
[Hotkeys]
Screenshot = SDL-0/Back & SDL-0/B
ToggleFullscreen = SDL-0/Back & SDL-0/X
OpenPauseMenu = SDL-0/Back & SDL-0/Y
LoadSelectedSaveState = SDL-0/Back & SDL-0/LeftShoulder
SaveSelectedSaveState = SDL-0/Back & SDL-0/RightShoulder
SelectPreviousSaveStateSlot = SDL-0/Back & SDL-0/+RightY
SelectNextSaveStateSlot = SDL-0/Back & SDL-0/-RightY
ToggleFastForward = SDL-0/Back & SDL-0/+RightTrigger
PowerOff = SDL-0/Back & SDL-0/Start
Reset = SDL-0/Back & SDL-0/A
Rewind = SDL-0/Back & SDL-0/+LeftTrigger
SwapMemoryCards = SDL-0/Back & SDL-0/-RightX & SDL-0/-RightY
ChangeDisc = SDL-0/Back & SDL-0/+RightX
[GameList]
RecursivePaths = /storage/roms/psx

View file

@ -1,40 +1,55 @@
# SPDX-License-Identifier: GPL-2.0-or-later # SPDX-License-Identifier: GPL-2.0-or-later
# Copyright (C) 2021-present Shanti Gilbert (https://github.com/shantigilbert)
# Copyright (C) 2022-present BrooksyTech (https://github.com/brooksytech) # Copyright (C) 2022-present BrooksyTech (https://github.com/brooksytech)
PKG_NAME="duckstationsa" PKG_NAME="duckstationsa"
PKG_VERSION="5ab5070d73f1acc51e064bd96be4ba6ce3c06f5c"
PKG_LICENSE="GPLv3" PKG_LICENSE="GPLv3"
PKG_DEPENDS_TARGET="toolchain SDL2 nasm:host pulseaudio openssl libidn2 nghttp2 zlib curl libevdev"
PKG_SITE="https://github.com/stenzek/duckstation" PKG_SITE="https://github.com/stenzek/duckstation"
PKG_URL="${PKG_SITE}.git" PKG_URL="${PKG_SITE}.git"
PKG_DEPENDS_TARGET="toolchain SDL2 nasm:host pulseaudio openssl libidn2 nghttp2 zlib curl libevdev"
PKG_SECTION="libretro"
PKG_SHORTDESC="Fast PlayStation 1 emulator for x86-64/AArch32/AArch64 " PKG_SHORTDESC="Fast PlayStation 1 emulator for x86-64/AArch32/AArch64 "
PKG_TOOLCHAIN="cmake"
PKG_PATCH_DIRS+=" ${DEVICE}" case ${DEVICE} in
RG552|handheld)
PKG_VERSION="ef3ad91ad0969013bc29ad1276c13aa2842ecc2b"
PKG_PATCH_DIRS+=" new"
;;
*)
PKG_VERSION="5ab5070d73f1acc51e064bd96be4ba6ce3c06f5c"
PKG_PATCH_DIRS+=" legacy"
;;
esac
if [ ! "${OPENGL}" = "no" ]; then if [ ! "${OPENGL}" = "no" ]; then
PKG_DEPENDS_TARGET+=" ${OPENGL} glu libglvnd" PKG_DEPENDS_TARGET+=" ${OPENGL} glu libglvnd"
PKG_CMAKE_OPTS_TARGET+=" -DUSE_X11=OFF"
fi fi
if [ "${OPENGLES_SUPPORT}" = yes ]; then if [ "${OPENGLES_SUPPORT}" = yes ]; then
PKG_DEPENDS_TARGET+=" ${OPENGLES}" PKG_DEPENDS_TARGET+=" ${OPENGLES}"
PKG_CMAKE_OPTS_TARGET+=" -DUSE_EGL=ON -DUSE_DRMKMS=ON -DUSE_MALI=OFF" PKG_CMAKE_OPTS_TARGET+=" -DUSE_X11=OFF \
-DUSE_DRMKMS=ON \
-DENABLE_EGL=ON \
-DUSE_MALI=OFF"
fi fi
if [ "${DISPLAYSERVER}" = "wl" ]; then
PKG_DEPENDS_TARGET+=" wayland ${WINDOWMANAGER} xorg-server xrandr libXi"
PKG_CMAKE_OPTS_TARGET+=" -DUSE_X11=ON"
fi
pre_configure_target() { pre_configure_target() {
PKG_CMAKE_OPTS_TARGET+=" -DANDROID=OFF \ PKG_CMAKE_OPTS_TARGET+=" -DANDROID=OFF \
-DENABLE_DISCORD_PRESENCE=OFF \ -DENABLE_DISCORD_PRESENCE=OFF \
-DUSE_X11=OFF \ -DBUILD_QT_FRONTEND=OFF \
-DBUILD_QT_FRONTEND=OFF \ -DBUILD_NOGUI_FRONTEND=ON \
-DBUILD_NOGUI_FRONTEND=ON \ -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_BUILD_TYPE=Release \ -DBUILD_SHARED_LIBS=OFF \
-DBUILD_SHARED_LIBS=OFF \ -DUSE_SDL2=ON \
-DUSE_SDL2=ON \ -DENABLE_CHEEVOS=ON \
-DENABLE_CHEEVOS=ON \ -DUSE_FBDEV=OFF \
-DUSE_FBDEV=OFF \ -DUSE_WAYLAND=OFF \
-DUSE_EVDEV=ON" -DENABLE_VULKAN=OFF
-DUSE_EVDEV=ON"
} }
makeinstall_target() { makeinstall_target() {
@ -44,15 +59,10 @@ makeinstall_target() {
mkdir -p ${INSTALL}/usr/config/duckstation mkdir -p ${INSTALL}/usr/config/duckstation
cp -rf ${PKG_BUILD}/.${TARGET_NAME}/bin/* ${INSTALL}/usr/config/duckstation cp -rf ${PKG_BUILD}/.${TARGET_NAME}/bin/* ${INSTALL}/usr/config/duckstation
cp -rf ${PKG_DIR}/config/* ${INSTALL}/usr/config/duckstation cp -rf ${PKG_DIR}/config/${DEVICE}/* ${INSTALL}/usr/config/duckstation
rm -rf ${INSTALL}/usr/config/duckstation/duckstation-nogui rm -rf ${INSTALL}/usr/config/duckstation/duckstation-nogui
rm -rf ${INSTALL}/usr/config/duckstation/common-tests rm -rf ${INSTALL}/usr/config/duckstation/common-tests
chmod +x ${INSTALL}/usr/bin/duckstation.sh chmod +x ${INSTALL}/usr/bin/start_duckstation.sh
if [[ "${DEVICE}" != RG552 ]]
then
sed -i '/Rotate = 1/d' ${INSTALL}/usr/config/duckstation/settings.ini
fi
} }

View file

@ -1,129 +0,0 @@
diff --git a/CMakeLists.txt b/CMakeLists.txt
index a02270e7..dbb48953 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -40,6 +40,7 @@ if(SUPPORTS_WAYLAND)
endif()
if((LINUX OR FREEBSD) OR ANDROID)
option(USE_EGL "Support EGL OpenGL context creation" ON)
+ option(USE_MALI "Link with libmali for EGL support" OFF)
endif()
if((LINUX OR FREEBSD) AND NOT ANDROID)
option(USE_DRMKMS "Support DRM/KMS OpenGL contexts" OFF)
@@ -232,7 +233,7 @@ elseif(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "x86" OR ${CMAKE_SYSTEM_PROCESSOR} STR
elseif(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "aarch64" OR ${CMAKE_SYSTEM_PROCESSOR} STREQUAL "arm64")
set(CPU_ARCH "aarch64")
elseif(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "arm" OR ${CMAKE_SYSTEM_PROCESSOR} STREQUAL "armv7-a" OR
- ${CMAKE_SYSTEM_PROCESSOR} STREQUAL "armv7l")
+ ${CMAKE_SYSTEM_PROCESSOR} STREQUAL "armv7l" OR ${CMAKE_SYSTEM_PROCESSOR} STREQUAL "armv8l")
set(CPU_ARCH "aarch32")
if(ANDROID)
# Force ARM mode, since apparently ANDROID_ARM_MODE isn't working..
@@ -240,8 +241,13 @@ elseif(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "arm" OR ${CMAKE_SYSTEM_PROCESSOR} STR
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -marm")
else()
# Enable NEON.
- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -marm -march=armv7-a")
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -marm -march=armv7-a")
+ if(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "armv8l")
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -marm -mtune=cortex-a72")
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -marm -mtune=cortex-a72")
+ else()
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -marm -march=armv7-a")
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -marm -march=armv7-a")
+ endif()
endif()
else()
message(FATAL_ERROR "Unknown system processor: " ${CMAKE_SYSTEM_PROCESSOR})
diff -u -r /home/romain/duckstation/CMakeModules/FindEGL.cmake ./CMakeModules/FindEGL.cmake
--- /home/romain/duckstation/CMakeModules/FindEGL.cmake 2021-02-13 00:29:48.693304818 +0100
+++ ./CMakeModules/FindEGL.cmake 2021-02-13 00:45:35.564462969 +0100
@@ -86,6 +86,17 @@
${PKG_EGL_LIBRARY_DIRS}
)
+if(USE_MALI)
+pkg_check_modules(PKG_MALI QUIET mali)
+find_library(MALI_LIBRARY
+ NAMES
+ mali
+ HINTS
+ ${PKG_MALI_LIBRARY_DIRS}
+)
+endif()
+
+
# NB: We do *not* use the version information from pkg-config, as that
# is the implementation version (eg: the Mesa version)
if(EGL_INCLUDE_DIR)
@@ -117,7 +128,11 @@
cmake_push_check_state(RESET)
list(APPEND CMAKE_REQUIRED_LIBRARIES "${EGL_LIBRARY}")
+if(USE_MALI)
+list(APPEND CMAKE_REQUIRED_LIBRARIES "${MALI_LIBRARY}")
+endif()
list(APPEND CMAKE_REQUIRED_INCLUDES "${EGL_INCLUDE_DIR}")
+list(APPEND CMAKE_REQUIRED_DEFINITIONS "-DEGL_NO_X11 -DUSE_X11=NO")
check_cxx_source_compiles("
#include <EGL/egl.h>
@@ -161,7 +176,11 @@
mark_as_advanced(EGL_LIBRARY EGL_INCLUDE_DIR HAVE_EGL)
# compatibility variables
+if (USE_MALI)
+set(EGL_LIBRARIES ${EGL_LIBRARY} ${MALI_LIBRARY})
+else()
set(EGL_LIBRARIES ${EGL_LIBRARY})
+endif()
set(EGL_INCLUDE_DIRS ${EGL_INCLUDE_DIR})
set(EGL_VERSION_STRING ${EGL_VERSION})
Seulement dans ./CMakeModules: FindEGL.cmake.orig
diff -u -r /home/romain/duckstation/dep/glad/CMakeLists.txt ./dep/glad/CMakeLists.txt
--- /home/romain/duckstation/dep/glad/CMakeLists.txt 2021-02-13 00:29:48.765302377 +0100
+++ ./dep/glad/CMakeLists.txt 2021-02-13 00:42:20.848512028 +0100
@@ -17,8 +17,9 @@
target_sources(glad PRIVATE src/glad_wgl.c)
else()
if(USE_EGL)
+ target_compile_definitions(glad PRIVATE -DEGL_NO_X11)
target_sources(glad PRIVATE src/glad_egl.c)
- target_link_libraries(glad PRIVATE EGL::EGL)
+ target_link_libraries(glad PRIVATE EGL)
endif()
if(USE_X11)
target_sources(glad PRIVATE src/glad_glx.c)
diff -u -r /home/romain/duckstation/src/common/CMakeLists.txt ./src/common/CMakeLists.txt
--- /home/romain/duckstation/src/common/CMakeLists.txt 2021-02-13 00:29:48.885298307 +0100
+++ ./src/common/CMakeLists.txt 2021-02-13 00:42:20.848512028 +0100
@@ -175,12 +175,13 @@
)
endif()
if(USE_DRMKMS)
+ target_compile_definitions(common PRIVATE "-DEGL_NO_X11=1")
target_compile_definitions(common PRIVATE "-DUSE_GBM=1")
target_sources(common PRIVATE
gl/context_egl_gbm.cpp
gl/context_egl_gbm.h
)
- target_link_libraries(common PUBLIC GBM::GBM)
+ target_link_libraries(common PUBLIC gbm EGL)
endif()
endif()
diff -u -r /home/romain/duckstation/src/duckstation-nogui/CMakeLists.txt ./src/duckstation-nogui/CMakeLists.txt
--- /home/romain/duckstation/src/duckstation-nogui/CMakeLists.txt 2021-02-13 00:29:48.901297765 +0100
+++ ./src/duckstation-nogui/CMakeLists.txt 2021-02-13 00:56:19.913224314 +0100
@@ -29,6 +29,10 @@
target_compile_definitions(duckstation-nogui PRIVATE "-DUSE_LIBEVDEV=1")
target_include_directories(duckstation-nogui PRIVATE ${LIBEVDEV_INCLUDE_DIRS})
target_link_libraries(duckstation-nogui PRIVATE ${LIBEVDEV_LIBRARIES})
+if (USE_MALI)
+ target_link_libraries(duckstation-nogui PRIVATE ${MALI_LIBRARY})
+endif()
+
endif()
if(WIN32)

View file

@ -1,14 +0,0 @@
diff --git a/src/common/file_system.cpp b/src/common/file_system.cpp
index ceb2f08..0fa5a04 100644
--- a/src/common/file_system.cpp
+++ b/src/common/file_system.cpp
@@ -683,6 +683,9 @@ std::string GetDisplayNameFromPath(const std::string_view& path)
std::string_view GetPathDirectory(const std::string_view& path)
{
+
+ return "/storage/.config/duckstation";
+
std::string::size_type pos = GetLastSeperatorPosition(path, false);
if (pos == std::string_view::npos)
return {};

View file

@ -1,13 +0,0 @@
diff --git a/src/duckstation-qt/qthostinterface.cpp b/src/duckstation-qt/qthostinterface.cpp
index 8052278..4f338d7 100644
--- a/src/duckstation-qt/qthostinterface.cpp
+++ b/src/duckstation-qt/qthostinterface.cpp
@@ -137,7 +137,7 @@ void QtHostInterface::installTranslator()
const QString language(QString::fromStdString(GetStringSettingValue("Main", "Language", "en")));
// install the base qt translation first
- const QString base_dir(QStringLiteral("%1/translations").arg(qApp->applicationDirPath()));
+ const QString base_dir(QStringLiteral("%1/translations").arg("/storage/.config/duckstation"));
const QString base_path(QStringLiteral("%1/qtbase_%2.qm").arg(base_dir).arg(language));
if (QFile::exists(base_path))
{

View file

@ -1,389 +0,0 @@
diff --git a/src/common/gl/program.h b/src/common/gl/program.h
index d877a462..3fa9a7a7 100644
--- a/src/common/gl/program.h
+++ b/src/common/gl/program.h
@@ -40,6 +40,7 @@ public:
void Destroy();
int RegisterUniform(const char* name);
+ GLint GetUniformLocation(int index) const { return m_uniform_locations[index]; }
void Uniform1ui(int index, u32 x) const;
void Uniform2ui(int index, u32 x, u32 y) const;
void Uniform3ui(int index, u32 x, u32 y, u32 z) const;
@@ -97,6 +98,6 @@ private:
GLuint m_fragment_shader_id = 0;
std::vector<GLint> m_uniform_locations;
-};
+}; // namespace GL
} // namespace GL
\ No newline at end of file
diff --git a/src/core/host_display.cpp b/src/core/host_display.cpp
index d0469fd3..790be30f 100644
--- a/src/core/host_display.cpp
+++ b/src/core/host_display.cpp
@@ -103,6 +103,11 @@ bool HostDisplay::GetHostRefreshRate(float* refresh_rate)
return WindowInfo::QueryRefreshRateForWindow(m_window_info, refresh_rate);
}
+bool HostDisplay::SetDisplayRotation(Rotation rotation)
+{
+ return false;
+}
+
void HostDisplay::SetSoftwareCursor(std::unique_ptr<HostDisplayTexture> texture, float scale /*= 1.0f*/)
{
m_cursor_texture = std::move(texture);
diff --git a/src/core/host_display.h b/src/core/host_display.h
index ea01f846..b5a3563e 100644
--- a/src/core/host_display.h
+++ b/src/core/host_display.h
@@ -60,6 +60,15 @@ public:
std::vector<std::string> fullscreen_modes;
};
+ enum class Rotation
+ {
+ None,
+ R90Degrees,
+ R180Degrees,
+ R270Degrees,
+ Count
+ };
+
virtual ~HostDisplay();
ALWAYS_INLINE const WindowInfo& GetWindowInfo() const { return m_window_info; }
@@ -201,6 +210,7 @@ public:
virtual bool SetDisplayPixels(HostDisplayPixelFormat format, u32 width, u32 height, const void* buffer, u32 pitch);
virtual bool GetHostRefreshRate(float* refresh_rate);
+ virtual bool SetDisplayRotation(Rotation rotation);
void SetDisplayLinearFiltering(bool enabled) { m_display_linear_filtering = enabled; }
void SetDisplayTopMargin(s32 height) { m_display_top_margin = height; }
@@ -283,6 +293,7 @@ protected:
s32 m_display_top_margin = 0;
Alignment m_display_alignment = Alignment::Center;
+ Rotation m_display_rotation = Rotation::None;
std::unique_ptr<HostDisplayTexture> m_cursor_texture;
float m_cursor_texture_scale = 1.0f;
diff --git a/src/core/settings.cpp b/src/core/settings.cpp
index 833b6b9f..4381b848 100644
--- a/src/core/settings.cpp
+++ b/src/core/settings.cpp
@@ -230,6 +230,7 @@ void Settings::Load(SettingsInterface& si)
display_line_start_offset = static_cast<s8>(si.GetIntValue("Display", "LineStartOffset", 0));
display_line_end_offset = static_cast<s8>(si.GetIntValue("Display", "LineEndOffset", 0));
display_linear_filtering = si.GetBoolValue("Display", "LinearFiltering", true);
+ display_rotate = static_cast<s8>(si.GetIntValue("Display", "Rotate", 0));
display_integer_scaling = si.GetBoolValue("Display", "IntegerScaling", false);
display_stretch = si.GetBoolValue("Display", "Stretch", false);
display_post_processing = si.GetBoolValue("Display", "PostProcessing", false);
diff --git a/src/core/settings.h b/src/core/settings.h
index e837f8b2..199ecac7 100644
--- a/src/core/settings.h
+++ b/src/core/settings.h
@@ -136,6 +136,7 @@ struct Settings
s16 display_active_end_offset = 0;
s8 display_line_start_offset = 0;
s8 display_line_end_offset = 0;
+ s8 display_rotate = 0;
bool display_force_4_3_for_24bit = false;
bool gpu_24bit_chroma_smoothing = false;
bool display_linear_filtering = true;
diff --git a/src/duckstation-nogui/nogui_host_interface.cpp b/src/duckstation-nogui/nogui_host_interface.cpp
index 638af4ea..6cef355a 100644
--- a/src/duckstation-nogui/nogui_host_interface.cpp
+++ b/src/duckstation-nogui/nogui_host_interface.cpp
@@ -136,6 +136,15 @@ bool NoGUIHostInterface::CreateDisplay(bool fullscreen)
return false;
}
+ switch(g_settings.display_rotate & 3)
+ {
+ case 1: m_display->SetDisplayRotation(HostDisplay::Rotation::R90Degrees);
+ case 2: m_display->SetDisplayRotation(HostDisplay::Rotation::R180Degrees);
+ case 3: m_display->SetDisplayRotation(HostDisplay::Rotation::R270Degrees);
+ case 0:
+ default: break;
+ }
+
if (fullscreen)
SetFullscreen(true);
diff --git a/src/frontend-common/opengl_host_display.cpp b/src/frontend-common/opengl_host_display.cpp
index 7092b455..ff1c7939 100644
--- a/src/frontend-common/opengl_host_display.cpp
+++ b/src/frontend-common/opengl_host_display.cpp
@@ -203,6 +203,77 @@ void OpenGLHostDisplay::UpdateDisplayPixelsTextureFilter()
m_display_texture_is_linear_filtered = m_display_linear_filtering;
}
+bool OpenGLHostDisplay::SetDisplayRotation(Rotation rotation)
+{
+ m_display_rotation = rotation;
+ UpdateDisplayRotationFramebuffer();
+ return true;
+}
+
+void OpenGLHostDisplay::UpdateDisplayRotationFramebuffer()
+{
+ m_window_info.surface_width = m_gl_context->GetSurfaceWidth();
+ m_window_info.surface_height = m_gl_context->GetSurfaceHeight();
+
+ if (m_display_rotation_framebuffer_fbo != 0)
+ {
+ glDeleteFramebuffers(1, &m_display_rotation_framebuffer_fbo);
+ m_display_rotation_framebuffer_fbo = 0;
+ glDeleteTextures(1, &m_display_rotation_framebuffer_texture);
+ m_display_rotation_framebuffer_texture = 0;
+ }
+
+ if (m_display_rotation != Rotation::None)
+ {
+ if (m_display_rotation_framebuffer_texture == 0)
+ glGenTextures(1, &m_display_rotation_framebuffer_texture);
+ if (m_display_rotation_framebuffer_fbo == 0)
+ glGenFramebuffers(1, &m_display_rotation_framebuffer_fbo);
+
+ if (m_display_rotation == Rotation::R90Degrees || m_display_rotation == Rotation::R270Degrees)
+ std::swap(m_window_info.surface_width, m_window_info.surface_height);
+
+ GLint old_texture;
+ glGetIntegerv(GL_TEXTURE_BINDING_2D, &old_texture);
+
+ glBindTexture(GL_TEXTURE_2D, m_display_rotation_framebuffer_texture);
+
+ if (GLAD_GL_ARB_texture_storage || GLAD_GL_ES_VERSION_3_1)
+ {
+ glTexStorage2D(GL_TEXTURE_2D, 1, GL_RGBA8, m_window_info.surface_width, m_window_info.surface_height);
+ }
+ else
+ {
+ glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, m_window_info.surface_width, m_window_info.surface_height, 0, GL_RGBA,
+ GL_UNSIGNED_BYTE, nullptr);
+ }
+
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 1);
+
+ const GLenum framebuffer_binding = m_use_gles2_draw_path ? GL_FRAMEBUFFER : GL_DRAW_FRAMEBUFFER;
+ GLint old_framebuffer;
+ glGetIntegerv(m_use_gles2_draw_path ? GL_FRAMEBUFFER_BINDING : GL_DRAW_FRAMEBUFFER_BINDING, &old_framebuffer);
+
+ glBindFramebuffer(framebuffer_binding, m_display_rotation_framebuffer_fbo);
+ glFramebufferTexture2D(framebuffer_binding, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D,
+ m_display_rotation_framebuffer_texture, 0);
+ Assert(glCheckFramebufferStatus(framebuffer_binding) == GL_FRAMEBUFFER_COMPLETE);
+
+ glBindFramebuffer(framebuffer_binding, old_framebuffer);
+ glBindTexture(GL_TEXTURE_2D, old_texture);
+ }
+
+ if (ImGui::GetCurrentContext())
+ {
+ ImGui::GetIO().DisplaySize =
+ ImVec2(static_cast<float>(m_window_info.surface_width), static_cast<float>(m_window_info.surface_height));
+ }
+}
+
bool OpenGLHostDisplay::SupportsDisplayPixelFormat(HostDisplayPixelFormat format) const
{
const auto [gl_internal_format, gl_format, gl_type] = GetPixelFormatMapping(m_gl_context->IsGLES(), format);
@@ -435,7 +506,7 @@ bool OpenGLHostDisplay::InitializeRenderDevice(std::string_view shader_cache_dir
glDebugMessageCallback(GLDebugCallback, nullptr);
glEnable(GL_DEBUG_OUTPUT);
- // glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS);
+ glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS);
}
if (!CreateResources())
@@ -484,7 +555,17 @@ bool OpenGLHostDisplay::ChangeRenderWindow(const WindowInfo& new_wi)
return false;
}
- m_window_info = m_gl_context->GetWindowInfo();
+ m_window_info = new_wi;
+ m_window_info.surface_width = m_gl_context->GetSurfaceWidth();
+ m_window_info.surface_height = m_gl_context->GetSurfaceHeight();
+
+ if (ImGui::GetCurrentContext())
+ {
+ ImGui::GetIO().DisplaySize.x = static_cast<float>(m_window_info.surface_width);
+ ImGui::GetIO().DisplaySize.y = static_cast<float>(m_window_info.surface_height);
+ }
+
+ UpdateDisplayRotationFramebuffer();
return true;
}
@@ -494,7 +575,16 @@ void OpenGLHostDisplay::ResizeRenderWindow(s32 new_window_width, s32 new_window_
return;
m_gl_context->ResizeSurface(static_cast<u32>(new_window_width), static_cast<u32>(new_window_height));
- m_window_info = m_gl_context->GetWindowInfo();
+ m_window_info.surface_width = m_gl_context->GetSurfaceWidth();
+ m_window_info.surface_height = m_gl_context->GetSurfaceHeight();
+
+ if (ImGui::GetCurrentContext())
+ {
+ ImGui::GetIO().DisplaySize.x = static_cast<float>(m_window_info.surface_width);
+ ImGui::GetIO().DisplaySize.y = static_cast<float>(m_window_info.surface_height);
+ }
+
+ UpdateDisplayRotationFramebuffer();
}
bool OpenGLHostDisplay::SupportsFullscreen() const
@@ -560,12 +650,17 @@ bool OpenGLHostDisplay::CreateResources()
{
static constexpr char fullscreen_quad_vertex_shader[] = R"(
uniform vec4 u_src_rect;
+uniform mat2 u_rotation_matrix;
out vec2 v_tex0;
void main()
{
vec2 pos = vec2(float((gl_VertexID << 1) & 2), float(gl_VertexID & 2));
- v_tex0 = u_src_rect.xy + pos * u_src_rect.zw;
+ v_tex0 = (u_src_rect.xy + pos * u_src_rect.zw);
+
+ vec2 center = vec2(0.5, 0.5);
+ v_tex0 = center + (u_rotation_matrix * (v_tex0 - center));
+
gl_Position = vec4(pos * vec2(2.0f, -2.0f) + vec2(-1.0f, 1.0f), 0.0f, 1.0f);
}
)";
@@ -617,12 +712,14 @@ void main()
m_display_program.Bind();
m_display_program.RegisterUniform("u_src_rect");
+ m_display_program.RegisterUniform("u_rotation_matrix");
m_display_program.RegisterUniform("samp0");
- m_display_program.Uniform1i(1, 0);
+ m_display_program.Uniform1i(2, 0);
m_cursor_program.Bind();
m_cursor_program.RegisterUniform("u_src_rect");
+ m_cursor_program.RegisterUniform("u_rotation_matrix");
m_cursor_program.RegisterUniform("samp0");
- m_cursor_program.Uniform1i(1, 0);
+ m_cursor_program.Uniform1i(2, 0);
glGenVertexArrays(1, &m_display_vao);
@@ -749,7 +846,7 @@ bool OpenGLHostDisplay::Render()
}
glDisable(GL_SCISSOR_TEST);
- glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
+ glBindFramebuffer(GL_DRAW_FRAMEBUFFER, m_display_rotation_framebuffer_fbo);
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
@@ -760,6 +857,12 @@ bool OpenGLHostDisplay::Render()
RenderSoftwareCursor();
+ if (m_display_rotation_framebuffer_fbo != 0)
+ {
+ glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
+ RenderRotatedFramebuffer();
+ }
+
m_gl_context->SwapBuffers();
return true;
}
@@ -833,6 +936,13 @@ void OpenGLHostDisplay::RenderDisplay()
m_display_texture_view_width, m_display_texture_view_height, m_display_linear_filtering);
}
+static const std::array<std::array<float, 4>, static_cast<u32>(HostDisplay::Rotation::Count)> s_rotation_matrices = {{
+ {{1.0f, 0.0f, 0.0f, 1.0f}},
+ {{0.0f, 1.0f, 1.0f, 0.0f}},
+ {{-1.0f, 0.0f, 0.0f, 1.0f}},
+ {{0.0f, -1.0f, -1.0f, 0.0f}},
+}};
+
static void DrawFullscreenQuadES2(s32 tex_view_x, s32 tex_view_y, s32 tex_view_width, s32 tex_view_height,
s32 tex_width, s32 tex_height)
{
@@ -879,6 +989,8 @@ void OpenGLHostDisplay::RenderDisplay(s32 left, s32 bottom, s32 width, s32 heigh
(static_cast<float>(texture_view_y) + (position_adjust * flip_adjust)) / static_cast<float>(texture_height),
(static_cast<float>(texture_view_width) - size_adjust) / static_cast<float>(texture_width),
(static_cast<float>(texture_view_height) - (size_adjust * flip_adjust)) / static_cast<float>(texture_height));
+ glUniformMatrix2fv(m_display_program.GetUniformLocation(1), 1, GL_TRUE,
+ s_rotation_matrices[static_cast<u32>(HostDisplay::Rotation::None)].data());
glBindSampler(0, linear_filter ? m_display_linear_sampler : m_display_nearest_sampler);
glBindVertexArray(m_display_vao);
glDrawArrays(GL_TRIANGLES, 0, 3);
@@ -894,6 +1006,30 @@ void OpenGLHostDisplay::RenderDisplay(s32 left, s32 bottom, s32 width, s32 heigh
}
}
+void OpenGLHostDisplay::RenderRotatedFramebuffer()
+{
+ const u32 width = m_gl_context->GetSurfaceWidth();
+ const u32 height = m_gl_context->GetSurfaceHeight();
+
+ glViewport(0, 0, width, height);
+ glDisable(GL_BLEND);
+ glDisable(GL_CULL_FACE);
+ glDisable(GL_DEPTH_TEST);
+ glDisable(GL_SCISSOR_TEST);
+ glDepthMask(GL_FALSE);
+
+ glClear(GL_COLOR_BUFFER_BIT);
+
+ m_display_program.Bind();
+ m_display_program.Uniform4f(0, 0.0f, 0.0f, 1.0f, 1.0f);
+ glUniformMatrix2fv(m_display_program.GetUniformLocation(1), 1, GL_TRUE,
+ s_rotation_matrices[static_cast<u32>(m_display_rotation)].data());
+ glBindTexture(GL_TEXTURE_2D, m_display_rotation_framebuffer_texture);
+
+ glBindVertexArray(m_display_vao);
+ glDrawArrays(GL_TRIANGLES, 0, 3);
+}
+
void OpenGLHostDisplay::RenderSoftwareCursor()
{
if (!HasSoftwareCursor())
diff --git a/src/frontend-common/opengl_host_display.h b/src/frontend-common/opengl_host_display.h
index 23e8d700..585ab4b5 100644
--- a/src/frontend-common/opengl_host_display.h
+++ b/src/frontend-common/opengl_host_display.h
@@ -51,6 +51,8 @@ public:
bool SetPostProcessingChain(const std::string_view& config) override;
+ bool SetDisplayRotation(Rotation rotation) override;
+
std::unique_ptr<HostDisplayTexture> CreateTexture(u32 width, u32 height, u32 layers, u32 levels, u32 samples,
HostDisplayPixelFormat format, const void* data, u32 data_stride,
bool dynamic = false) override;
@@ -83,6 +85,8 @@ protected:
void BindDisplayPixelsTexture();
void UpdateDisplayPixelsTextureFilter();
+ void UpdateDisplayRotationFramebuffer();
+ void RenderRotatedFramebuffer();
void RenderDisplay();
void RenderImGui();
@@ -121,6 +125,9 @@ protected:
u32 m_display_pixels_texture_pbo_map_size = 0;
std::vector<u8> m_gles_pixels_repack_buffer;
+ GLuint m_display_rotation_framebuffer_texture = 0;
+ GLuint m_display_rotation_framebuffer_fbo = 0;
+
PostProcessingChain m_post_processing_chain;
GL::Texture m_post_processing_input_texture;
std::unique_ptr<GL::StreamBuffer> m_post_processing_ubo;

View file

@ -1,110 +0,0 @@
diff --git a/src/frontend-common/sdl_controller_interface.cpp b/src/frontend-common/sdl_controller_interface.cpp
index 20e81daf..1deac2ce 100644
--- a/src/frontend-common/sdl_controller_interface.cpp
+++ b/src/frontend-common/sdl_controller_interface.cpp
@@ -6,6 +6,7 @@
#include "core/host_interface.h"
#include "core/system.h"
#include "sdl_initializer.h"
+#include "fullscreen_ui.h"
#include <SDL.h>
#include <cmath>
Log_SetChannel(SDLControllerInterface);
@@ -93,6 +94,8 @@ void SDLControllerInterface::PollEvents()
bool SDLControllerInterface::ProcessSDLEvent(const SDL_Event* event)
{
+ if (m_slots < 0) { m_host_interface->AddOSDMessage("State Slot set to #0", 5.f); m_slots = 0; }
+
switch (event->type)
{
case SDL_CONTROLLERDEVICEADDED:
@@ -204,6 +207,7 @@ bool SDLControllerInterface::OpenGameController(int index)
cd.joystick_id = joystick_id;
cd.haptic_left_right_effect = -1;
cd.game_controller = gcontroller;
+ cd.hotkey_down = false;
#if SDL_VERSION_ATLEAST(2, 0, 9)
cd.use_game_controller_rumble = (SDL_GameControllerRumble(gcontroller, 0, 0, 0) == 0);
@@ -712,15 +716,59 @@ bool SDLControllerInterface::HandleControllerButtonEvent(const SDL_ControllerBut
m_host_interface->SetControllerNavigationButtonState(nav_button_mapping[ev->button], pressed);
}
+ if (ev->button >= MAX_NUM_BUTTONS)
+ return false;
+
+ //------ Mimic Retroarch
+ if (ev->button == SDL_CONTROLLER_BUTTON_GUIDE || ev->button == SDL_CONTROLLER_BUTTON_BACK) it->hotkey_down = pressed;
+ else if (it->hotkey_down)
+ {
+ if (!pressed)
+ switch(ev->button)
+ {
+ case SDL_CONTROLLER_BUTTON_A : m_host_interface->SaveScreenshot(); break;
+ case SDL_CONTROLLER_BUTTON_B : m_host_interface->ResetSystem(); break;
+ case SDL_CONTROLLER_BUTTON_X : if (FullscreenUI::HasActiveWindow()) FullscreenUI::CloseQuickMenu(); else FullscreenUI::OpenQuickMenu(); break;
+ case SDL_CONTROLLER_BUTTON_Y : m_host_interface->ToggleWidescreen(); break;
+ case SDL_CONTROLLER_BUTTON_START :
+ case SDL_CONTROLLER_BUTTON_LEFTSTICK :
+ case SDL_CONTROLLER_BUTTON_RIGHTSTICK : break;
+ case SDL_CONTROLLER_BUTTON_LEFTSHOULDER : m_host_interface->LoadState(false, m_slots); break;
+ case SDL_CONTROLLER_BUTTON_RIGHTSHOULDER: m_host_interface->SaveState(false, m_slots); break;
+ case SDL_CONTROLLER_BUTTON_DPAD_UP : m_slots = ++m_slots % 10; m_host_interface->AddOSDMessage(std::string("State Slot set to #") + (char)(0x30 + m_slots), 5.f); break;
+ case SDL_CONTROLLER_BUTTON_DPAD_DOWN : m_slots = (m_slots + 9) % 10; m_host_interface->AddOSDMessage(std::string("State Slot set to #") + (char)(0x30 + m_slots), 5.f); break;
+ case SDL_CONTROLLER_BUTTON_DPAD_LEFT : m_host_interface->SetRewindState(!System::IsRewinding()); break;
+ case SDL_CONTROLLER_BUTTON_DPAD_RIGHT : m_host_interface->SetFastForwardEnabled(!m_host_interface->IsFastForwardEnabled()); break;
+ default: break;
+ }
+ else
+ switch(ev->button)
+ {
+ case SDL_CONTROLLER_BUTTON_START : m_host_interface->RequestExit(); break;
+ case SDL_CONTROLLER_BUTTON_A :
+ case SDL_CONTROLLER_BUTTON_B :
+ case SDL_CONTROLLER_BUTTON_X :
+ case SDL_CONTROLLER_BUTTON_Y :
+ case SDL_CONTROLLER_BUTTON_LEFTSTICK :
+ case SDL_CONTROLLER_BUTTON_RIGHTSTICK :
+ case SDL_CONTROLLER_BUTTON_LEFTSHOULDER :
+ case SDL_CONTROLLER_BUTTON_RIGHTSHOULDER:
+ case SDL_CONTROLLER_BUTTON_DPAD_UP :
+ case SDL_CONTROLLER_BUTTON_DPAD_DOWN :
+ case SDL_CONTROLLER_BUTTON_DPAD_LEFT :
+ case SDL_CONTROLLER_BUTTON_DPAD_RIGHT :
+ default: break;
+ }
+
+ return true;
+ }
+
if (m_host_interface->IsControllerNavigationActive())
{
// UI consumed the event
return true;
}
- if (ev->button >= MAX_NUM_BUTTONS)
- return false;
-
const ButtonCallback& cb = it->button_mapping[ev->button];
if (cb)
{
diff --git a/src/frontend-common/sdl_controller_interface.h b/src/frontend-common/sdl_controller_interface.h
index 06963a5c..ffc2ffac 100644
--- a/src/frontend-common/sdl_controller_interface.h
+++ b/src/frontend-common/sdl_controller_interface.h
@@ -57,6 +57,7 @@ private:
int joystick_id;
int player_id;
bool use_game_controller_rumble;
+ bool hotkey_down;
float deadzone = 0.25f;
@@ -93,4 +94,5 @@ private:
Hook::Callback m_event_intercept_callback;
bool m_sdl_subsystem_initialized = false;
+ int m_slots = -1;
};

View file

@ -1,13 +0,0 @@
diff --git a/src/frontend-common/controller_interface.h b/src/frontend-common/controller_interface.h
index f97d0f6..563b5f4 100644
--- a/src/frontend-common/sdl_controller_interface.h
+++ b/src/frontend-common/sdl_controller_interface.h
@@ -46,7 +46,7 @@
enum : int
{
MAX_NUM_AXES = 7,
- MAX_NUM_BUTTONS = 16,
+ MAX_NUM_BUTTONS = 256,
};
struct ControllerData

View file

@ -1,19 +1,19 @@
diff --git a/src/common/file_system.cpp b/src/common/file_system.cpp diff --git a/src/common/file_system.cpp b/src/common/file_system.cpp
index 6a24732..a287703 100644 index b22db26e..092fa9ee 100644
--- a/src/common/file_system.cpp --- a/src/common/file_system.cpp
+++ b/src/common/file_system.cpp +++ b/src/common/file_system.cpp
@@ -1179,6 +1179,8 @@ bool FileSystem::DeleteDirectory(const char* Path, bool Recursive) @@ -1308,6 +1308,8 @@ bool FileSystem::DeleteDirectory(const char* path)
std::string GetProgramPath() std::string FileSystem::GetProgramPath()
{ {
+ return "/storage/.config/duckstation"; + return "/storage/.config/duckstation";
+ +
std::wstring buffer; std::wstring buffer;
buffer.resize(MAX_PATH); buffer.resize(MAX_PATH);
@@ -1549,6 +1551,8 @@ bool DeleteDirectory(const char* Path, bool Recursive) @@ -1789,6 +1791,8 @@ bool FileSystem::DeleteDirectory(const char* path)
std::string GetProgramPath() std::string FileSystem::GetProgramPath()
{ {
+ return "/storage/.config/duckstation"; + return "/storage/.config/duckstation";
+ +

View file

@ -0,0 +1,14 @@
diff --git a/src/common/file_system.cpp b/src/common/file_system.cpp
index b22db26e..ad856d93 100644
--- a/src/common/file_system.cpp
+++ b/src/common/file_system.cpp
@@ -315,6 +315,9 @@ std::string FileSystem::GetDisplayNameFromPath(const std::string_view& path)
std::string_view Path::GetDirectory(const std::string_view& path)
{
+
+return "/storage/.config/duckstation";
+
const std::string::size_type pos = GetLastSeperatorPosition(path, false);
if (pos == std::string_view::npos)
return {};

View file

@ -0,0 +1,33 @@
diff --git a/src/frontend-common/fullscreen_ui.cpp b/src/frontend-common/fullscreen_ui.cpp
index ce53e69f..fc0b24d5 100644
--- a/src/frontend-common/fullscreen_ui.cpp
+++ b/src/frontend-common/fullscreen_ui.cpp
@@ -244,6 +244,7 @@ static void DoChangeDiscFromFile();
static void DoChangeDisc();
static void DoRequestExit();
static void DoToggleFullscreen();
+static void EnableDoToggleFullscreen();
static void DoCheatsMenu();
static void DoToggleAnalogMode();
@@ -1038,6 +1039,11 @@ void FullscreenUI::DoToggleFullscreen()
Host::RunOnCPUThread([]() { Host::SetFullscreen(!Host::IsFullscreen()); });
}
+void FullscreenUI::EnableDoToggleFullscreen()
+{
+ Host::SetFullscreen(true);
+}
+
//////////////////////////////////////////////////////////////////////////
// Landing Window
//////////////////////////////////////////////////////////////////////////
@@ -1050,6 +1056,8 @@ void FullscreenUI::SwitchToLanding()
void FullscreenUI::DrawLandingWindow()
{
+ EnableDoToggleFullscreen();
+
BeginFullscreenColumns(nullptr, 0.0f, true);
if (BeginFullscreenColumnWindow(0.0f, -710.0f, "logo", UIPrimaryDarkColor))

View file

@ -21,5 +21,6 @@ fi
ln -sfv "/storage/roms/savestates/psx" "/storage/.config/duckstation/savestates" ln -sfv "/storage/roms/savestates/psx" "/storage/.config/duckstation/savestates"
cp -rf /storage/.config/SDL-GameControllerDB/gamecontrollerdb.txt /storage/.config/duckstation/database/gamecontrollerdb.txt cp -rf /storage/.config/SDL-GameControllerDB/gamecontrollerdb.txt /storage/.config/duckstation/database/gamecontrollerdb.txt
cp -rf /storage/.config/SDL-GameControllerDB/gamecontrollerdb.txt /storage/.config/duckstation/resources/gamecontrollerdb.txt
duckstation-nogui -fullscreen -settings "/storage/.config/duckstation/settings.ini" -- "${1}" > /dev/null 2>&1 duckstation-nogui -fullscreen -settings "/storage/.config/duckstation/settings.ini" -- "${1}" > /dev/null 2>&1

View file

@ -8,17 +8,18 @@
. /etc/os-release . /etc/os-release
EE_DEVICE=${HW_DEVICE} EE_DEVICE=${HW_DEVICE}
RUN_DIR="/storage/roms/ecwolf"
CONFIG_DIR="/storage/.config/game/ecwolf" CONFIG_DIR="/storage/.config/game/ecwolf"
CONFIG_FILE="${CONFIG_DIR}/ecwolf.cfg" CONFIG_FILE="${CONFIG_DIR}/ecwolf.cfg"
PK3_FILE="${CONFIG_DIR}/ecwolf.pk3"
SAVE_DIR="/storage/roms/gamedata/ecwolf" SAVE_DIR="/storage/roms/gamedata/ecwolf"
LEGACY=true
if [ ! -L "/storage/.config/ecwolf" ] if [ ! -L "/storage/.config/ecwolf" ]; then
then
ln -sf "/storage/.config/game/ecwolf" "/storage/.config/ecwolf" ln -sf "/storage/.config/game/ecwolf" "/storage/.config/ecwolf"
fi fi
if [ ! -f "/storage/.config/game/ecwolf/ecwolf.cfg" ] if [ ! -f "/storage/.config/game/ecwolf/ecwolf.cfg" ]; then
then
cp -rf /usr/config/game/ecwolf/ecwolf.cfg /storage/.config/game/ecwolf/ cp -rf /usr/config/game/ecwolf/ecwolf.cfg /storage/.config/game/ecwolf/
fi fi
@ -27,34 +28,82 @@ mkdir -p ${SAVE_DIR}
params=" --config ${CONFIG_FILE} --savedir ${SAVE_DIR}" params=" --config ${CONFIG_FILE} --savedir ${SAVE_DIR}"
# data can be SD2 SD3 SOD WL6 or N3D and it's passed as the ROM # data can be SD2 SD3 SOD WL6 or N3D and it's passed as the ROM
DATA=${1#*.} EXT=${1##*.}
# If its a mod (extension .ecwolf) read the file and parse the data # If its a mod (extension .ecwolf) read the file and parse the data
if [ ${DATA} == "ecwolf" ]; then if [ ${EXT} == "ecwolf" ]; then
dos2unix "${1}" dos2unix "${1}"
# We don't want to break users that have .ecwolf files that predate the PATH
# option, so we'll track that here so we can handle it by:
# 1. Parsing PK3[_N] keys
# 2. Ignoring MOD and PATH keys
# 3. Running from the config dir
if grep -q "^PATH=" "${1}"; then
LEGACY=false
fi
while IFS== read -r key value; do while IFS== read -r key value; do
if $LEGACY; then
if [ "$key" == "PK3" ]; then
params+=" --file $value"
fi
if [ "$key" == "PK3_1" ]; then
params+=" --file $value"
fi
if [ "$key" == "PK3_2" ]; then
params+=" --file $value"
fi
if [ "$key" == "PK3_3" ]; then
params+=" --file $value"
fi
if [ "$key" == "PK3_4" ]; then
params+=" --file $value"
fi
else
if [ "$key" == "PATH" ]; then
# Unquote path value
temp="${value}"
temp="${temp%\"}"
temp="${temp#\"}"
RUN_DIR+="/$temp"
fi
if [ "$key" == "MOD" ]; then
params+=" --file $value"
fi
fi
if [ "$key" == "DATA" ]; then if [ "$key" == "DATA" ]; then
params+=" --data $value" params+=" --data $value"
fi fi
if [ "$key" == "PK3" ]; then done <"${1}"
params+=" --file $value"
fi
if [ "$key" == "PK3_1" ]; then
params+=" --file $value"
fi
if [ "$key" == "PK3_2" ]; then
params+=" --file $value"
fi
if [ "$key" == "PK3_3" ]; then
params+=" --file $value"
fi
if [ "$key" == "PK3_4" ]; then
params+=" --file $value"
fi
done < "${1}"
else else
params+=" --data ${DATA}" params+=" --data ${EXT}"
fi fi
cd "${CONFIG_DIR}" if $LEGACY; then
/usr/bin/ecwolf ${params} > /var/log/ecwolf.log 2>&1 cd "${CONFIG_DIR}"
else
# There doesn't appear to be a way to tell the engine with command line
# arguments where the ecwolf.pk3 is located -- it just looks in the current
# working directory. To work around this, we'll bind the ecwolf.pk3 file that
# ships with the distribution into the provided game path, if one isn't
# already present.
DST_PK3_FILE="${RUN_DIR}/ecwolf.pk3"
if [ ! -e "$DST_PK3_FILE" ]; then
do_cleanup() {
umount "$DST_PK3_FILE" &>/dev/null
rm "${DST_PK3_FILE}"
}
touch "$DST_PK3_FILE"
mount -o ro,bind "$PK3_FILE" "$DST_PK3_FILE" >/dev/null 2>&1
trap do_cleanup EXIT
fi
cd "${RUN_DIR}"
fi
echo ${params} | xargs /usr/bin/ecwolf >/var/log/ecwolf.log 2>&1

View file

@ -4,7 +4,7 @@
# Copyright (C) 2022-present Fewtarius # Copyright (C) 2022-present Fewtarius
PKG_NAME="flycastsa" PKG_NAME="flycastsa"
PKG_VERSION="7457db8bba3277dcc9b4ec0c3556847f5082a455" PKG_VERSION="aa97a6d64fb47d3ce0febaa575b26d975dd916e4"
PKG_LICENSE="GPLv2" PKG_LICENSE="GPLv2"
PKG_SITE="https://github.com/flyinghead/flycast" PKG_SITE="https://github.com/flyinghead/flycast"
PKG_URL="${PKG_SITE}.git" PKG_URL="${PKG_SITE}.git"
@ -22,7 +22,7 @@ if [ "${OPENGLES_SUPPORT}" = yes ]; then
PKG_CMAKE_OPTS_TARGET+=" -DUSE_GLES=ON" PKG_CMAKE_OPTS_TARGET+=" -DUSE_GLES=ON"
fi fi
if [ "${ARCH}" = "x86_64" ] if [ "${VULKAN_SUPPORT}" = "yes" ]
then then
PKG_DEPENDS_TARGET+=" vulkan-loader vulkan-headers" PKG_DEPENDS_TARGET+=" vulkan-loader vulkan-headers"
PKG_CMAKE_OPTS_TARGET+=" -DUSE_VULKAN=ON" PKG_CMAKE_OPTS_TARGET+=" -DUSE_VULKAN=ON"

View file

@ -4,40 +4,40 @@
[IWADSearch.Directories] [IWADSearch.Directories]
Path=. Path=.
Path=$DOOMWADDIR Path=$DOOMWADDIR
Path=/storage/.config/distribution/gzdoom Path=/storage/.config/game/gzdoom
Path=/storage/roms/doom Path=/storage/roms/doom
# These are the directories to search for wads added with the -file # These are the directories to search for wads added with the -file
# command line parameter, if they cannot be found with the path # command line parameter, if they cannot be found with the path
# as-is. Layout is the same as for IWADSearch.Directories # as-is. Layout is the same as for IWADSearch.Directories
[FileSearch.Directories] [FileSearch.Directories]
Path=/storage/.config/distribution/gzdoom Path=/storage/.config/game/gzdoom
Path=/storage/roms/doom Path=/storage/roms/doom
Path=$DOOMWADDIR Path=$DOOMWADDIR
# These are the directories to search for soundfonts that let listed in the menu. # These are the directories to search for soundfonts that let listed in the menu.
# Layout is the same as for IWADSearch.Directories # Layout is the same as for IWADSearch.Directories
[SoundfontSearch.Directories] [SoundfontSearch.Directories]
Path=/storage/.config/distribution/gzdoom/soundfonts Path=/storage/.config/game/gzdoom/soundfonts
Path=/storage/.config/distribution/gzdoom/fm_banks Path=/storage/.config/game/gzdoom/fm_banks
# Files to automatically execute when running the corresponding game. # Files to automatically execute when running the corresponding game.
# Each file should be on its own line, preceded by Path= # Each file should be on its own line, preceded by Path=
[Doom.AutoExec] [Doom.AutoExec]
Path=/storage/.config/distribution/gzdoom/autoexec.cfg Path=/storage/.config/game/gzdoom/autoexec.cfg
[Heretic.AutoExec] [Heretic.AutoExec]
Path=/storage/.config/distribution/gzdoom/autoexec.cfg Path=/storage/.config/game/gzdoom/autoexec.cfg
[Hexen.AutoExec] [Hexen.AutoExec]
Path=/storage/.config/distribution/gzdoom/autoexec.cfg Path=/storage/.config/game/gzdoom/autoexec.cfg
[Strife.AutoExec] [Strife.AutoExec]
Path=/storage/.config/distribution/gzdoom/autoexec.cfg Path=/storage/.config/game/gzdoom/autoexec.cfg
[Chex.AutoExec] [Chex.AutoExec]
Path=/storage/.config/distribution/gzdoom/autoexec.cfg Path=/storage/.config/game/gzdoom/autoexec.cfg
# WAD files to always load. These are loaded after the IWAD but before # WAD files to always load. These are loaded after the IWAD but before
# any files added with -file. Place each file on its own line, preceded # any files added with -file. Place each file on its own line, preceded

View file

@ -4,40 +4,40 @@
[IWADSearch.Directories] [IWADSearch.Directories]
Path=. Path=.
Path=$DOOMWADDIR Path=$DOOMWADDIR
Path=/storage/.config/distribution/gzdoom Path=/storage/.config/game/gzdoom
Path=/storage/roms/doom Path=/storage/roms/doom
# These are the directories to search for wads added with the -file # These are the directories to search for wads added with the -file
# command line parameter, if they cannot be found with the path # command line parameter, if they cannot be found with the path
# as-is. Layout is the same as for IWADSearch.Directories # as-is. Layout is the same as for IWADSearch.Directories
[FileSearch.Directories] [FileSearch.Directories]
Path=/storage/.config/distribution/gzdoom Path=/storage/.config/game/gzdoom
Path=/storage/roms/doom Path=/storage/roms/doom
Path=$DOOMWADDIR Path=$DOOMWADDIR
# These are the directories to search for soundfonts that let listed in the menu. # These are the directories to search for soundfonts that let listed in the menu.
# Layout is the same as for IWADSearch.Directories # Layout is the same as for IWADSearch.Directories
[SoundfontSearch.Directories] [SoundfontSearch.Directories]
Path=/storage/.config/distribution/gzdoom/soundfonts Path=/storage/.config/game/gzdoom/soundfonts
Path=/storage/.config/distribution/gzdoom/fm_banks Path=/storage/.config/game/gzdoom/fm_banks
# Files to automatically execute when running the corresponding game. # Files to automatically execute when running the corresponding game.
# Each file should be on its own line, preceded by Path= # Each file should be on its own line, preceded by Path=
[Doom.AutoExec] [Doom.AutoExec]
Path=/storage/.config/distribution/gzdoom/autoexec.cfg Path=/storage/.config/game/gzdoom/autoexec.cfg
[Heretic.AutoExec] [Heretic.AutoExec]
Path=/storage/.config/distribution/gzdoom/autoexec.cfg Path=/storage/.config/game/gzdoom/autoexec.cfg
[Hexen.AutoExec] [Hexen.AutoExec]
Path=/storage/.config/distribution/gzdoom/autoexec.cfg Path=/storage/.config/game/gzdoom/autoexec.cfg
[Strife.AutoExec] [Strife.AutoExec]
Path=/storage/.config/distribution/gzdoom/autoexec.cfg Path=/storage/.config/game/gzdoom/autoexec.cfg
[Chex.AutoExec] [Chex.AutoExec]
Path=/storage/.config/distribution/gzdoom/autoexec.cfg Path=/storage/.config/game/gzdoom/autoexec.cfg
# WAD files to always load. These are loaded after the IWAD but before # WAD files to always load. These are loaded after the IWAD but before
# any files added with -file. Place each file on its own line, preceded # any files added with -file. Place each file on its own line, preceded

View file

@ -0,0 +1,13 @@
diff --git a/src/common/menu/menu.cpp b/src/common/menu/menu.cpp
index 4532dae1d..c81ec2e9a 100644
--- a/src/common/menu/menu.cpp
+++ b/src/common/menu/menu.cpp
@@ -702,7 +702,7 @@ bool M_Responder (event_t *ev)
mkey = MKEY_Back;
break;
- case KEY_JOY4:
+ case KEY_JOY3:
case KEY_PAD_X:
mkey = MKEY_Clear;
break;

View file

@ -0,0 +1,49 @@
diff --git a/src/common/menu/menu.cpp b/src/common/menu/menu.cpp
index 4532dae1d..8c394dc79 100644
--- a/src/common/menu/menu.cpp
+++ b/src/common/menu/menu.cpp
@@ -702,7 +702,7 @@ bool M_Responder (event_t *ev)
mkey = MKEY_Back;
break;
- case KEY_JOY4:
+ case KEY_JOY3:
case KEY_PAD_X:
mkey = MKEY_Clear;
break;
@@ -721,7 +721,7 @@ bool M_Responder (event_t *ev)
case KEY_PAD_LTHUMB_UP:
case KEY_JOYAXIS2MINUS:
case KEY_JOYPOV1_UP:
- case KEY_JOY9:
+ case KEY_JOY14:
mkey = MKEY_Up;
break;
@@ -729,7 +729,7 @@ bool M_Responder (event_t *ev)
case KEY_PAD_LTHUMB_DOWN:
case KEY_JOYAXIS2PLUS:
case KEY_JOYPOV1_DOWN:
- case KEY_JOY10:
+ case KEY_JOY15:
mkey = MKEY_Down;
break;
@@ -737,7 +737,7 @@ bool M_Responder (event_t *ev)
case KEY_PAD_LTHUMB_LEFT:
case KEY_JOYAXIS1MINUS:
case KEY_JOYPOV1_LEFT:
- case KEY_JOY11:
+ case KEY_JOY16:
mkey = MKEY_Left;
break;
@@ -745,7 +745,7 @@ bool M_Responder (event_t *ev)
case KEY_PAD_LTHUMB_RIGHT:
case KEY_JOYAXIS1PLUS:
case KEY_JOYPOV1_RIGHT:
- case KEY_JOY12:
+ case KEY_JOY17:
mkey = MKEY_Right;
break;
}

View file

@ -0,0 +1,91 @@
diff --git a/src/common/menu/menu.cpp b/src/common/menu/menu.cpp
index 4532dae1d..8c394dc79 100644
--- a/src/common/menu/menu.cpp
+++ b/src/common/menu/menu.cpp
@@ -702,7 +702,7 @@ bool M_Responder (event_t *ev)
mkey = MKEY_Back;
break;
- case KEY_JOY4:
+ case KEY_JOY3:
case KEY_PAD_X:
mkey = MKEY_Clear;
break;
@@ -721,7 +721,7 @@ bool M_Responder (event_t *ev)
case KEY_PAD_LTHUMB_UP:
case KEY_JOYAXIS2MINUS:
case KEY_JOYPOV1_UP:
- case KEY_JOY9:
+ case KEY_JOY14:
mkey = MKEY_Up;
break;
@@ -729,7 +729,7 @@ bool M_Responder (event_t *ev)
case KEY_PAD_LTHUMB_DOWN:
case KEY_JOYAXIS2PLUS:
case KEY_JOYPOV1_DOWN:
- case KEY_JOY10:
+ case KEY_JOY15:
mkey = MKEY_Down;
break;
@@ -737,7 +737,7 @@ bool M_Responder (event_t *ev)
case KEY_PAD_LTHUMB_LEFT:
case KEY_JOYAXIS1MINUS:
case KEY_JOYPOV1_LEFT:
- case KEY_JOY11:
+ case KEY_JOY16:
mkey = MKEY_Left;
break;
@@ -745,7 +745,7 @@ bool M_Responder (event_t *ev)
case KEY_PAD_LTHUMB_RIGHT:
case KEY_JOYAXIS1PLUS:
case KEY_JOYPOV1_RIGHT:
- case KEY_JOY12:
+ case KEY_JOY17:
mkey = MKEY_Right;
break;
}
diff --git a/src/common/console/keydef.h b/src/common/console/keydef.h
index 971ab398f..726a2c432 100644
--- a/src/common/console/keydef.h
+++ b/src/common/console/keydef.h
@@ -68,20 +68,22 @@ enum EKeyCodes
KEY_FIRSTJOYBUTTON = 0x108,
KEY_JOY1 = KEY_FIRSTJOYBUTTON+0,
- KEY_JOY2,
- KEY_JOY3,
- KEY_JOY4,
- KEY_JOY5,
- KEY_JOY6,
- KEY_JOY7,
- KEY_JOY8,
- KEY_JOY9,
- KEY_JOY10,
- KEY_JOY11,
- KEY_JOY12,
- KEY_JOY13,
- KEY_JOY14,
- KEY_JOY15,
+ KEY_JOY2 = KEY_FIRSTJOYBUTTON+1,
+ KEY_JOY3 = KEY_FIRSTJOYBUTTON+2,
+ KEY_JOY4 = KEY_FIRSTJOYBUTTON+3,
+ KEY_JOY5 = KEY_FIRSTJOYBUTTON+4,
+ KEY_JOY6 = KEY_FIRSTJOYBUTTON+5,
+ KEY_JOY7 = KEY_FIRSTJOYBUTTON+6,
+ KEY_JOY8 = KEY_FIRSTJOYBUTTON+7,
+ KEY_JOY9 = KEY_FIRSTJOYBUTTON+8,
+ KEY_JOY10 = KEY_FIRSTJOYBUTTON+9,
+ KEY_JOY11 = KEY_FIRSTJOYBUTTON+10,
+ KEY_JOY12 = KEY_FIRSTJOYBUTTON+11,
+ KEY_JOY13 = KEY_FIRSTJOYBUTTON+12,
+ KEY_JOY14 = KEY_FIRSTJOYBUTTON+13,
+ KEY_JOY15 = KEY_FIRSTJOYBUTTON+14,
+ KEY_JOY16 = KEY_FIRSTJOYBUTTON+15,
+ KEY_JOY17 = KEY_FIRSTJOYBUTTON+16,
KEY_LASTJOYBUTTON = 0x187,
KEY_JOYPOV1_UP = 0x188,
KEY_JOYPOV1_RIGHT = 0x189,

View file

@ -2,8 +2,8 @@
# Copyright (C) 2018-present 5schatten (https://github.com/5schatten) # Copyright (C) 2018-present 5schatten (https://github.com/5schatten)
PKG_NAME="hatarisa" PKG_NAME="hatarisa"
PKG_VERSION="e81c9addd39898e2897056b2bc3fd6908afabf9e" PKG_VERSION="4a4c2f174bd1f5e5da87a109c02a046fe30dbfa0"
PKG_SHA256="d3dc44ea719695be0bce2646ca4a431470b2008b7f9ed4c243b2f867a432996c" PKG_SHA256="1e6ba340b380006aa18842f6890bd393e816ef23cbf3c51312d5ffa7a3026697"
PKG_LICENSE="GPL" PKG_LICENSE="GPL"
PKG_SITE="https://github.com/hatari/hatari" PKG_SITE="https://github.com/hatari/hatari"
PKG_URL="https://github.com/hatari/hatari/archive/${PKG_VERSION}.tar.gz" PKG_URL="https://github.com/hatari/hatari/archive/${PKG_VERSION}.tar.gz"

View file

@ -3,13 +3,13 @@
# Copyright (C) 2022-present Fewtarius # Copyright (C) 2022-present Fewtarius
PKG_NAME="hypseus-singe" PKG_NAME="hypseus-singe"
PKG_VERSION="9d20d5f92ab612ac7596da05b991d89333679ae5" PKG_VERSION="a0c3de2c02d210dfe78a7ecb54781f3842d817b9"
PKG_REV="1" PKG_REV="1"
PKG_ARCH="any" PKG_ARCH="any"
PKG_LICENSE="GPL3" PKG_LICENSE="GPL3"
PKG_SITE="https://github.com/DirtBagXon/hypseus-singe" PKG_SITE="https://github.com/DirtBagXon/hypseus-singe"
PKG_URL="${PKG_SITE}.git" PKG_URL="${PKG_SITE}.git"
PKG_DEPENDS_TARGET="toolchain SDL2 SDL2_ttf SDL2_image libogg libvorbis" PKG_DEPENDS_TARGET="toolchain SDL2 SDL2_ttf SDL2_image libmpeg2 libogg libvorbis"
PKG_LONGDESC="Hypseus is a fork of Daphne. A program that lets one play the original versions of many laserdisc arcade games on one's PC." PKG_LONGDESC="Hypseus is a fork of Daphne. A program that lets one play the original versions of many laserdisc arcade games on one's PC."
PKG_TOOLCHAIN="cmake" PKG_TOOLCHAIN="cmake"
GET_HANDLER_SUPPORT="git" GET_HANDLER_SUPPORT="git"

View file

@ -0,0 +1,61 @@
diff --git a/src/menu/menu.cpp b/src/menu/menu.cpp
index 2af6616fa0..8ef95e1358 100644
--- a/src/menu/menu.cpp
+++ b/src/menu/menu.cpp
@@ -666,17 +666,17 @@ bool M_Responder (event_t *ev)
ch = ev->data1;
switch (ch)
{
- case KEY_JOY2:
+ case KEY_JOY1: //B button
case KEY_PAD_A:
mkey = MKEY_Back;
break;
- case KEY_JOY1:
+ case KEY_JOY2: //A button
case KEY_PAD_B:
mkey = MKEY_Enter;
break;
- case KEY_JOY4:
+ case KEY_JOY3: //X button
case KEY_PAD_X:
mkey = MKEY_Clear;
break;
@@ -695,7 +695,7 @@ bool M_Responder (event_t *ev)
case KEY_PAD_LTHUMB_UP:
case KEY_JOYAXIS2MINUS:
case KEY_JOYPOV1_UP:
- case KEY_JOY9:
+ case KEY_JOY9: //Dpad up
mkey = MKEY_Up;
break;
@@ -703,7 +703,7 @@ bool M_Responder (event_t *ev)
case KEY_PAD_LTHUMB_DOWN:
case KEY_JOYAXIS2PLUS:
case KEY_JOYPOV1_DOWN:
- case KEY_JOY10:
+ case KEY_JOY10: //Dpad down
mkey = MKEY_Down;
break;
@@ -711,7 +711,7 @@ bool M_Responder (event_t *ev)
case KEY_PAD_LTHUMB_LEFT:
case KEY_JOYAXIS1MINUS:
case KEY_JOYPOV1_LEFT:
- case KEY_JOY11:
+ case KEY_JOY11: //Dpad left
mkey = MKEY_Left;
break;
@@ -719,7 +719,7 @@ bool M_Responder (event_t *ev)
case KEY_PAD_LTHUMB_RIGHT:
case KEY_JOYAXIS1PLUS:
case KEY_JOYPOV1_RIGHT:
- case KEY_JOY12:
+ case KEY_JOY12: //Dpad right
mkey = MKEY_Right;
break;
}

Some files were not shown because too many files have changed in this diff Show more